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>
적는중