카테고리 없음

[ReactJS] Props, 커스텀 컴포넌트, React.memo()

mswait 2022. 3. 7. 15:41

props 에 뭘 또 넣어줄 수 있을지 볼거다.

 

여기 Btn에 들어가는 onClick은 버튼 컴포넌트에 들어가는 Props 이다. 실제 이벤트리스너가 아니라 말이다.

 

 

onClick을 return 하는 JSX의 HTML 안에 넣는다면 그건 이벤트리스너를 넣어주는 게 되겠지만

 

커스텀 컴포넌트에 onClick를 넣어주는 것은 이벤트 리스너가 아니다. 이건 단지 하나의 Prop인거지. 

마찬가지로 단순히 커스텀 컴포넌트 안에 적어준 Props 이기 때문에 style 같은 걸 적어줘도 전혀 작동하지 않는다.

아래와 같이 해줘야된다. 커스텀 컴포넌트 안에 들어가는 건 단순히 Prop가 될 뿐이다. 이것들은 결코 실제 HTML 태그 안에 들어가지 않는다.

state 를 만들면 modifier 함수가 생성된다.

modifier 함수는 바로 state 어떤 값을 할당하고 reRender 를 하기 때문에

이거를 또다른 함수에 넣어줘서 컨트롤 해준다.

 

(setValue를 그냥 바로 onClick에 넣어줄수는 없나?)

 

prop를 버튼 태그의 onClick 이벤트 리스너로서 활용하고 있으니깐.

 

커스텀 컴포넌트 안에 하나 이상의 태그가 들어가 있을 수 있고 그렇기에 어디에 넣어줘야 할 지 모르기에 ReactJS 가 어떤 결정도 하지 않는거다.

 

ReactJS 에서는 최적화를 많이 제공하는데 아래와 같이 변화가 없는데 반복되는 것을 최적화 할 수 있다.

 

컴포넌트가 state를 바꾸면 다시 render한다는 것을 알고 있다. 

 

부모 컴포넌트가 App 이 state를 변화 시키고 있고 두개의 버튼 컴포넌트가 모두 리랜더링 된다.

 

React Memo 라는 걸 활용해 볼 수 있다.

이 컴포넌트를 다시 리랜더링하고 싶지 않다. props 가 변경되지 않는다고 하면.

결국 우리는 이 컴포넌트를 다시 그릴지 말지 결정을 할 수 있다.

 

리액트 메모.

* 항상 파스칼 케이스로 적어주어야 함. 첫글자 대문자.

React.memo()

버튼을 클릭하면, 이벤트리스너에 따라 changeValue가 실행이 되어야 하고 changeValue는 state를 변화 시키기 때문에 다시 re-render를 발생시켜야 한다. 

 

만약 부모가(App) 어떠한 state의 변화라도 있다?

모든 자식들(Btn Btn) 은 다시 그려질 것이다.

그리고 이게 추후에 Application 이 느려지는 원인을 제공할지도 모른다.