반응형
Javascript에서 "function is clouser" 라는 것을 떠올려보자
왜냐하면 우리가 useCallback을 통해 리액트에게 어떤 환경에서든 함수 재생성을 하지 않게 막았기 때문이다.
따라서, 리액트가 이 함수에 사용하기 위해 저장한 allowToggle의 값은 최신의 값이 아니고, App 컴포넌트가 처음 실행된 시점의 값을 저장하고 있다
헷갈리는 개념 강의를 한 번 더 들어봐야할 것 같다!
Button callback 사용했는데 console 실행되는 문제 확인 다시 해보기
import React, { useState, useCallback } from 'react';
import DemoOutput from './components/Demo/DemoOutput';
import './App.css';
import Button from './components/UI/Button/Button';
function App() {
console.log('APP RUNNING');
const [showParagraph, setShowParagraph] = useState();
const [allowToggle, setAllowToggle] = useState();
const toggleParagraph = useCallback(() => {
if(allowToggle) {
setShowParagraph((prev) => !prev);
}
}, [allowToggle]);
const allowToggleHandler = () => {
setAllowToggle(true);
}
return (
<div className="app">
<h1>Hi there!</h1>
<DemoOutput show={showParagraph} />
<Button onClick={allowToggleHandler}>Allow Toggling</Button>
<Button onClick={toggleParagraph}>Toggle Paragraph</Button>
</div>
);
}
export default App;
반응형
'온라인 강의 > React 완벽 가이드 [Udemy]' 카테고리의 다른 글
168. State 및 컴포넌트 자세히 살펴보기 (0) | 2023.06.27 |
---|---|
167. 첫 번째 요약 (0) | 2023.06.27 |
165. useCallback()으로 함수 재생성 방지하기 (0) | 2023.06.27 |
164. react.memo()로 불필요한 재평가 방지하기 (0) | 2023.06.27 |
163. 자식 컴포넌트 재평가 자세히 살펴보기 (0) | 2023.06.27 |