ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

ํ•จ์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ์ด์ œ์ด์…˜

useCallback()์€ ํ•จ์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜(memorization)ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” hook ํ•จ์ˆ˜์ด๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋„˜์–ด์˜จ ํ•จ์ˆ˜๋ฅผ, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ๋„˜์–ด์˜จ ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€ ์ €์žฅํ•ด๋†“๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

const memoizedCallback = useCallback(callbackFunc, []);

useCallback์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์–ด๋–ค React ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ์ด ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ด ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋žœ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ ์ƒ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’ ๋น„๊ต_ํ•จ์ˆ˜ ๋™๋“ฑ์„ฑ

func1 = () => x + y;
func2 = () => x + y;

console.log(func1 === func2) //false

๊ฐ์ฒด๋Š” ์›์‹œ๊ฐ’๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฐธ์กฐ๊ฐ’(๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์ฃผ์†Œ๊ฐ’)์— ๋”ฐ๋ฅธ ๋น„๊ต๋ฅผ ํ•œ๋‹ค. 

์ค‘์š”ํ•œ ๊ฒƒ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒ์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ์„œ ์ทจ๊ธ‰๋œ๋‹ค.

์ผ๊ธ‰ ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.

๋ฌด๋ช…์˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ(๋Ÿฐํƒ€์ž„์— ์ƒ์„ฑ ๊ฐ€๋Šฅ)
๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ(๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ)์— ์ €์žฅ ๊ฐ€๋Šฅ
ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ ๊ฐ€๋Šฅ
ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ด๋Ÿฌํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŠน์„ฑ์€ React ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props์œผ๋กœ ๋„˜๊ธธ ๋•Œ

์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜์กด ๋ฐฐ์—ด๋กœ ํ•จ์ˆ˜๋ฅผ ๋„˜๊ธธ ๊ฒฝ์šฐ

useEffect(() => {
        quillInstance.current = new Quill(quillElement.current, {
        
            (....)

        const quill = quillInstance.current;
        quill.on('text-change', (delta, oldDelta, source) => {
            if(source === 'user') {
                onChangeField({key: 'body', value: quill.root.innerHTML})
            }
        })
    }, [onChangeField]);
const onChangeField = useCallback(payload => dispatch(changeField(payload)), [dispatch]);

๋‹ค์Œ๊ณผ ๊ฐ™์ด  ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฆฌ๋•์Šค์˜ ์•ก์…˜ ์ƒ์„ฑ ํ•จ์ˆ˜๋ฅผ dispatch() ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ, onChangeField ํ•จ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ

ํ˜ธ์ถœ์ด ๋œ๋‹ค.

 

์—ฌ๊ธฐ์„œ onChangeField ํ•จ์ˆ˜๋ฅผ useCallback์œผ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์€ ์ฑ„, ๊ทธ๋Œ€๋กœ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— props๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  ์˜์กด์„ฑ ๋ฐฐ์—ด์— ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋œ๋‹ค๋ฉด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜์˜ ๋™๋“ฑ์„ฑ์„ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ์‹์ด ์ฐธ์กฐ๊ฐ’์— ์˜ํ•œ ๋น„๊ต์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌดํ•œ ๋ฃจํ”„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

onChangeField๋Š” ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋žœ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด useEffect() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์•ก์…˜ ์ƒ์„ฑ ํ•จ์ˆ˜๋ฅผ dispatch ํ•˜๊ฒŒ ๋˜๊ณ  ๋ฆฌ๋•์Šค ๋‚ด์— state์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ผ ๋‹ค์‹œ ๋žœ๋”๋ง์ด ์ผ์–ด๋‚˜๊ณ  ๊ทธ๋Ÿผ ๋˜ ๋‹ค์‹œ useEffect ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์•…์ˆœํ™˜์ด ๋ฐ˜๋ณต๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ํ•จ์ˆ˜๋ฅผ props๋กœ ๋„˜๊ธธ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ useCallback์œผ๋กœ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ