https://www.taniarascia.com/getting-started-with-react/
음 너무 많은데????
setState 호출은 비동기적으로 이루어짐
이전 state 값을 기준으로 값을 계산해야한다면 객체 대신 updater 함수
를 전달하시오
setState는 eventHandler 안에서 비동기적임
부모, 자식모두 clickEvent에서 setState를 호출하면 자식은 2번 렌더링 되지 않음
브라우저 이벤트가 끝날 때 state를 일괄 업데이트함
그럼 일단 여기에 익숙해지고 state 관리하는 라이브러리들을 써보시오 👉 recoil, redux
예시
incrementCount() {
this.setState({
count: this.state.count + 1
});
}
handleSomething() {
this.incrementCount();
this.incrementCount();
this.incrementCount();
}
this.state.count
는 1이 됨this.state.count
를 갱신하지 않기 때문입니다.incrementCount()
는 매번 this.state.count
의 값을 0으로 읽은 뒤에 이 값을 1로 설정합니다.해결책
incrementCount() {
this.setState((state) => {
return {count: state.count + 1}
});
}
handleSomething() {
this.incrementCount();
this.incrementCount();
this.incrementCount();
}
this.state.count
값을 읽어 보면 이 값은 여전히 0예시를 보자
function NumberList(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
🙅 <li>{number}</li>
🙆 <li key={number.toString()}>{number}</li>
);
return (
<ul>{listItems}</ul>
);
}
const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
<NumberList numbers={numbers} />,
document.getElementById('root')
);
또 다른 예시
function ListItem(props) {
return
🙅 <li key={value.toString()}>{value}</li>
🙆 <li>{props.value}</li>;
}
function NumberList(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
🙅 <ListItem value={number} />
🙆 <ListItem key={number.toString()} value={number} />
);
return (
<ul>{listItems}</ul>
);
}
const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
<NumberList numbers={numbers} />,
document.getElementById('root')
);
폼 엘리먼트는 사용자의 입력을 기반으로 자신의 state를 관리하고 업데이트함
setState()에 의해 업데이트 필요
예시_여러개의 input이 있을때
handleInputChange(event) {
const target = event.target;
const value = target.type === 'checkbox' ?
target.checked : target.value;
const name = target.name;
this.setState({
[name]: value
});
}
<input
name="isGoing"
type="checkbox"
checked={this.state.isGoing}
onChange={this.handleInputChange} />
<input
name="numberOfGuests"
type="number"
value={this.state.numberOfGuests}
onChange={this.handleInputChange} />
state 업데이트에 대해 eventHandler 대신 ref를 써서 DOM에서 폼 값을 가져올 수 있다
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
this.fileInput = React.createRef();
}
handleSubmit(event) {
event.preventDefault();
alert(`선택-${this.fileInput.current.files[0].name}`;
}
<form onSubmit={this.handleSubmit}>
<input type="text" ref={this.input} />
</form>
적는중