<input/>
, <select/>
, <textarea/>
등...
Controlled Component
: 요소를 가지고 있는 컴포넌트가 관리하고 업데이트한다.Uncontrolled Component
: 요소의 상태를 관리하지 않고, 요소의 참조만 컴포넌트가 소유한다.일반적으로 제어 컴포넌트는 입력을 렌더링하는 컴포넌트에서 해당 상태를 저장한다.
class ControlledComponent extends React.Component {
state = {
value: "",
};
render() {
const { value } = this.state;
return (
<div>
<input type="text" value={value} onChange={this.change} />
<button onClick={this.click}>전송</button>
</div>
);
}
change = (e) => {
// console.log(e.target.value);
this.setState({ value: e.target.value });
};
click = () => {
console.log(this.state.value);
};
}
사용자가 입력한 것을 기억하고, ref
를 사용하여 겂을 얻을 수 있다.
필요할때 필드에서 값을 가져와야한다.
class UncontrolledComponent extends React.Component {
inputRef = React.createRef();
render() {
return (
<div>
<input type="text" id="input" ref={this.inputRef} />
<button onClick={this.click}>전송</button>
</div>
);
}
componentDidMount() {
console.log(this.inputRef);
}
click = () => {
const input = document.querySelector("#input");
//실제 DOM에 접근하는 방식으로 React에서 지양하는 방식이다.
console.log(this.inputRef.current.value);
};
}
input
,textarea
에 포커스할때