React

컨텍스트 api

sdafdq 2023. 11. 24. 17:11

props를 바로 줄 수 있는데,

형제끼리 안되고 조상과 손자끼리는 다이렉트로 줄 수 있음.

 

api 약자가 application programming interface긴 한데, 보통 보면 데이터 전달 같음.

 

이것도 그런 듯.

 

이거는 useContext라는 훅을 따로 사용해서 그걸 export해서 밖에 표류하게 해 놓음.

 

그러면 자손들 중에 그거 import해서 사용 가능함.

 

export const MessageStateContext = React.createContext();
export const MessageDispatchContext = React.createContext();

이렇게 Context를 생성해 줌

 

return (
<div className="App">
  <MessageStateContext.Provider value={{message}}>
    <MessageDispatchContext.Provider value={{ onAdd, onChange, onCheck }}>
      <Editor></Editor>
      <A></A>
    </MessageDispatchContext.Provider>
  </MessageStateContext.Provider>
</div>
);

이렇게 자식들을 저 콘텍스트로 감싸줌.

콘텍스트.Provider로 공급해 준다는 거임

value가 넣을것임.

 

저렇게 export로 표류시켜준 다음에

지금 내가 A > B > C(반복, 리스트임)

import React, { useContext } from 'react'
import { MessageDispatchContext } from '../App';


function C({message}){
  const {onCheck} = useContext(MessageDispatchContext); 
  .....

저렇게 App.js로 부터 직접 가져온다.

 

그리고, useContext도 필요하다.

const {뿌려준값명} = useContext(뿌려준콘텍스트명);

 

이렇게 뿌려준 값을 담아서 사용할 수 있다.

 

위에서 보면 message라는 것과 콜백메소드를 뿌려줬음.

그럼 그거 받아서 사용할 수 있는거.

 

뿌려준 값명 저거 당연히 맞춰줘야 함.

우리가 { useState } 하면 useState가 골라서 들어오듯 저렇게 해 줘야 함.

 

여튼 저렇게 하면 되는데..

 

좀 문제가 있음.

 

기존에 해놨던 useCallback, React.memo등이 안먹힘.

 

내가 

export const MessageStateContext = React.createContext();
export const MessageDispatchContext = React.createContext();

이렇게 따로 나눠서 뿌려준 것도 따로 최적화 해 줄려고..

 

 

많이 헷갈린다.

이거 하면 이점이 유지보수에 굉장히 좋다.

일일이 props를 타고 들어가게 하지 않아도 되어서..

 

  const memoDispatches = useMemo(()=>{
    return {onCheck, onChange, onAdd}
  },[]);

이걸 이렇게 해서,

<MessageDispatchContext.Provider value={memoDispatches}>

이렇게 넘겨줘 버리면 되긴한다.

 

  const memoDispatches = useMemo(()=>{
    return {onCheck, onChange, onAdd}
  },[]);

이렇게 하면, 메소드 각각이 아니라 객체 자체가 useMemo가 적용되는 것이다.

그런데, memoDispatches.onCheck 등 하면서 객체를 타고가는 거니 useMemo가 적용되는 듯 하다.

 

 

 

 

https://velog.io/@dongha1992/useContext-%EC%B5%9C%EC%A0%81%ED%99%94

 

이 사람꺼 참고하셈.

 

 

 

'React' 카테고리의 다른 글

리액트 아이콘  (0) 2023.11.27
emmet으로 구조 한번에 만들기  (0) 2023.11.27
vite로 리액트 개발하기 (jsx)  (0) 2023.11.23
라우터  (0) 2023.11.23
컴포넌트 한 파일에서 export 여러개  (0) 2023.11.23