You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/** * Parent, Child는 color를 사용하지 않고, * 단지 하위 컴포넌트의 props로 넘겨주는 역할만 하고 있습니다. */constApp=()=><Parentcolor="blue"/>;constParent=(props)=><Childcolor={props.color}/>;constChild=(props)=><GrandChildcolor={props.color}/>;constGrandChild=(props)=><p>Color : {props.color}</p>;exportdefaultApp;
2. Provider, Consumer를 사용 (ProviderConsumer.js)
/** * createContext, Provider, Consumer를 사용해 * 하위 컴포넌트에 context를 전달합니다. */importReactfrom"react";constColorContext=React.createContext("red");constApp=()=>{constcolor="blue";return(<ColorContext.Providervalue={color}><Parent/></ColorContext.Provider>);};constParent=()=><Child/>;constChild=()=><GrandChild/>;constGrandChild=()=>{return(<ColorContext.Consumer>{(color)=><p>Color : {color}</p>}</ColorContext.Consumer>);};exportdefaultApp;
3. 상태 변경함수 전달 (ModifyContextData.js)
/** * setColor Context를 하나 더 만들어 * 하위 컴포넌트에 상태 변경 함수를 전달합니다. */importReact,{useState}from"react";constColorContext=React.createContext("red");constSetColorContext=React.createContext(()=>{});constApp=()=>{const[color,setColor]=useState("pink");return(<SetColorContext.Providervalue={setColor}><ColorContext.Providervalue={color}><Parent/></ColorContext.Provider></SetColorContext.Provider>);};constParent=()=><Child/>;constChild=()=><GrandChild/>;constGrandChild=()=>{return(<SetColorContext.Consumer>{(setColor)=>(<ColorContext.Consumer>{(color)=>(<><p>Color : {color}</p><buttononClick={()=>setColor("blue")}>Blue 로 변경!</button></>)}</ColorContext.Consumer>)}</SetColorContext.Consumer>);};exportdefaultApp;
4. UseContext 사용 (UseContext.js)
/** * 함수형 컴포넌트를 사용한다면, * useContext 훅을 사용하여 보다 간결하게 표현할 수 있습니다. */importReact,{useContext,useState}from"react";constColorContext=React.createContext("red");constSetColorContext=React.createContext(()=>{});constApp=()=>{const[color,setColor]=useState("pink");return(<SetColorContext.Providervalue={setColor}><ColorContext.Providervalue={color}><Parent/></ColorContext.Provider></SetColorContext.Provider>);};constParent=()=><Child/>;constChild=()=><GrandChild/>;constGrandChild=()=>{constcolor=useContext(ColorContext);constsetColor=useContext(SetColorContext);return(<><p>Color : {color}</p><buttononClick={()=>setColor("blue")}>Blue 로 변경!</button></>);};exportdefaultApp;
5. Provider 분리
/** * Provider가 많아 질경우, * 이를 관리하는 컴포넌트를 만들어 분리할 수 있습니다. */importReact,{useContext,useState}from"react";constColorContext=React.createContext("red");constSetColorContext=React.createContext(()=>{});constAppProvider=(props)=>{const[color,setColor]=useState("pink");return(<SetColorContext.Providervalue={setColor}><ColorContext.Providervalue={color}>{props.children}</ColorContext.Provider></SetColorContext.Provider>);};constApp=()=>(<AppProvider><Parent/></AppProvider>);constParent=()=><Child/>;constChild=()=><GrandChild/>;constGrandChild=()=>{constcolor=useContext(ColorContext);constsetColor=useContext(SetColorContext);return(<><p>Color : {color}</p><buttononClick={()=>setColor("blue")}>Blue 로 변경!</button></>);};exportdefaultApp;
6. useReducer 사용 (UseReducer.js, ColorModule.js)
/** * useReducer훅을 사용하여, * 컴포넌트의 상태값을 Redux의 Reducer처럼 관리합니다. */importColorModule,{setColor}from"./ColorModule";importReact,{useContext}from"react";constColorContext=React.createContext("red");constSetColorContext=React.createContext(()=>{});constAppProvider=(props)=>{const{ state, dispatch }=ColorModule();return(<SetColorContext.Providervalue={dispatch}><ColorContext.Providervalue={state}>{props.children}</ColorContext.Provider></SetColorContext.Provider>);};constApp=()=>(<AppProvider><Parent/></AppProvider>);constParent=()=><Child/>;constChild=()=><GrandChild/>;constGrandChild=()=>{const{ color }=useContext(ColorContext);constdispatch=useContext(SetColorContext);return(<><p>Color : {color}</p><buttononClick={()=>dispatch(setColor("blue"))}>Blue 로 변경!</button></>);};exportdefaultApp;