๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

[React] setState callBack ํ•จ์ˆ˜

SleepyWoods ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ „์ฒด ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค.

 

์ „์ฒด ์ฑ„ํŒ…์„ ๋‹ด๋‹นํ•˜๋Š” Chat ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง€์—ญ์ƒํƒœ๋กœ ์ „์ฒด ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๋„๋ก ํ–ˆ๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

const [chatDatas, setChatDatas] = useState<chatType[]>([]);

// ์ฑ„ํŒ… ์—…๋ฐ์ดํŠธ
const updateChat = (chat: chatType) => {
  ...
  chat.timestamp = calcTimeFromMs(chat.timestamp);  // timestamp์„ ํฌ๋ฉงํŒ…ํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ
  setChatDatas([...chatDatas, chat]);
};
  
type chatType = {
  type: string;
  timestamp: string;
  nickname: string | number;
  message: string;
};

์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๊ฐ„๋‹จํžˆ ํ•˜๋จ„updateChat์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” socket์œผ๋กœ ๋‹ค๋ฅธ ์œ ์ €์˜ ์ฑ„ํŒ…์ด ์™”์„ ๋•Œ, ๋‚ด๊ฐ€ ์ฑ„ํŒ…์„ ๋ณด๋ƒˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์ด ๊ฐ€๊ณต๋˜์–ด chatType์ด๋ผ๋Š” type์˜ ํ˜•ํƒœ๋กœ setChatDatas์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ํ˜•์‹์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์œ„์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์„ ๋•Œ, socket์„ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ์œ ์ €์˜ ์ฑ„ํŒ…์„ ๋ฐ›๊ณ  ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์—์„œ chatDatas๊ฐ€ ์ด์ „ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ ...

 

๊ฒฐ๊ณผ์ ์œผ๋กœ useState์˜ set ํ•จ์ˆ˜ setChatDatas์˜ ์ธ์ž๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

setChatDatas(chatDatas => [...chatDatas, chat]);

 

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” useState๊ฐ€ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๊ณ , useState์˜ set ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜(์ต๋ช… ํ•จ์ˆ˜)๋ฅผ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋˜๋ฉด ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

+ useState ํŠน์ง•

  1. ๋น„๋™๊ธฐ๋กœ ๋™์ž‘
  2. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” BATCH ์ฒ˜๋ฆฌ
  3. ์ƒˆ๋กœ์šด state๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Œ