๐Ÿ“Œ setState

setState() ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

1
setState(updater[, callback])

updater์— ์ปดํฌ๋„ŒํŠธ์˜ state ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  React์—๊ฒŒ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ๋ Œ๋”๋งํ•ด์•ผํ•œ๋‹ค๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

  • setState() ํ˜ธ์ถœ์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ค„์ง„๋‹ค.
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์žฌ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
    • ์—ฌ๋Ÿฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ผ๊ด„์ ์œผ๋กœ ๊ฐฑ์‹ ํ•˜๊ฑฐ๋‚˜ ๋‚˜์ค‘์— ๋ฏธ๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ๋•Œ๋ฌธ์— setState() ํ˜ธ์ถœํ•˜์ž๋งˆ์ž this.state์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ๋Œ€์‹  componentDidUpdate() ๋˜๋Š” setState(updater, callback)์ฒ˜๋Ÿผ 2๋ฒˆ์งธ ์ธ์ž๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
1
2
3
4
5
6
7
8
9
10
this.state = {
message: "",
};

this.setState(
{ message: "์ƒํƒœ ๋ณ€๊ฒฝ" },
() => console.log("callback: ", this.state.message) // '์ƒํƒœ ๋ณ€๊ฒฝ'
);

console.log(this.state.message); // ''
  • ์•„์ง ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— this.state.message์˜ ๊ฐ’์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š์•˜๋‹ค.

๐ŸŽ’ 2022.11.12 ์ถ”๊ฐ€

setState() ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜ ์˜ฌ ๋•Œ

1
2
3
4
5
6
7
8
9
10
11
12
13
export class BinaryCalcurator extends Component {
state = {
buttonStates: Array(this.props.numberOfButtons).fill(false),
};

handleToggleButtonContent = (index) => {
this.setState(({ buttonStates }) => ({
buttonStates: buttonStates.map((buttonState, idx) =>
idx === index ? !buttonState : buttonState
),
}));
};
}
  • ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์ด์ „ ์ƒํƒœ๋ฅผ ๋ฐ›์•„์„œ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•œ๋‹ค.