💬 이벤트에 등록하는 함수에서는 이벤트 객체 'e'를 파라미터로 받아와서 사용
// InputSample.js
import React, { useState } from 'react'; // useState 사용
function InputSample() {
const [text, setText] = useState('');
const onChange = (e) => {
setText(e.target.value);
};
const onReset = () => {
setText('');
};
return (
<div>
<input onChange={onChange} value={text} /> // input의 onChange 이벤트 사용
<button onClick={onReset}>초기화</button>
<div>
<b>값: {text}</b>
</div>
</div>
);
}
export default InputSample;
// App.js
import React from 'react';
import InputSample from './InputSample';
function App() {
return (
<InputSample />
);
}
export default App;
💡 placeholder 값 설정
// InputSample.js
import React, { useState } from 'react';
function InputSample() {
const [inputs, setInputs] = useState({
name: '',
nickname: ''
});
const { name, nickname } = inputs; // 비구조화 할당을 통해 값 추출
const onChange = (e) => {
const { value, name } = e.target; // e.target 에서 name 과 value 를 추출
setInputs({
...inputs, // 기존의 input 객체를 복사
[name]: value // name 키를 가진 값을 value 로 설정
});
};
const onReset = () => {
setInputs({
name: '',
nickname: '',
})
};
return (
<div>
<input name="name" placeholder="이름" onChange={onChange} value={name} />
<input name="nickname" placeholder="닉네임" onChange={onChange} value={nickname}/>
<button onClick={onReset}>초기화</button>
<div>
<b>값: </b>
{name} ({nickname})
</div>
</div>
);
}
export default InputSample;
💬 리액트 상태 객체 수정
리액트에서 객체를 업데이트하게 될 때에는 기존 객체를 직접 수정하면 안되고, 새로운 객체를 만들어서, 새 객체에 변화를 주어야 된다.
inputs[name] = value; // error
setInputs({ // 새로운 객체 생성 후, 이 객체에 대하여 바꾸고, 이를 사용
...inputs,
[name]: value
});
📝 useRef
💬 Hook 함수이며, 특정 DOM을 선택할 때 사용
// InputSample.js
import React, { useState, useRef } from 'react'; // useRef 사용
function InputSample() {
...
const nameInput = useRef(); // useRef()를 사용하여 Ref 객체 생성
// 이 객체를 우리가 선택하고 싶은 DOM 에 ref 값으로 설정
const onReset = () => {
setInputs({
name: '',
nickname: ''
});
nameInput.current.focus(); // nameInput에 focus
// Ref 객체의 .current 값 : 우리가 원하는 DOM
};
...