React
React - Context API(전역 값 관리)
Starters
2020. 9. 13. 20:00
이전 코드들에서 UserList는 다리 역할만 하고 있음
User 컴포넌트로 onRemove와 onToggle을 전달하기 위해서
UserList컴포넌트에선 쓰지 않지만 내부에 적어줬음
- UserList.js -
function UserList( { users, onRemove, onToggle }){ // 여기도
return (
<div>
{
users.map(
(user) => (
<User
user={user}
key={user.id}
onRemove={onRemove} // 여기랑
onToggle={onToggle} // 여기
/>
)
)
}
</div>
)
}
Context API 사용하면, 이렇게 넘겨 받지 않아도 바로 User컴포넌트까지 전달할 수 있다.
본 예제 적용하기 전에
간단한 예제로 테스트
1. ContextSample.js 생성
- createContext와 useContext 선언
import React, { createContext, useContext } from 'react';
function Child({ text }) {
return <div>안녕하세요? {text}</div>
}
function Parent({ text }) {
return <Child text={text} />
}
function GrandParent({ text }) {
return <Parent text={text} />
}
function ContextSample({ text }) {
return <GrandParent text='Good' />
}
export default ContextSample;
2. index.js에서 컴포넌트 실행확인
...
import * as serviceWorker from './serviceWorker';
import ContextSample from './ContextSample';
ReactDOM.render(
<React.StrictMode>
<ContextSample />
</React.StrictMode>,
...

3. Context API 사용
- ContextSample.js -
Child 함수 내부 수정, MyContext 변수 선언
import React, { createContext, useContext } from 'react';
const MyContext = createContext('defaultValue');
function Child() {
const text = useContext(MyContext);
return <div>안녕하세요? {text}</div>
}

- text의 값이 정해지지 않았기 때문에 defaultValue라고 뜬다.
4. 값 설정하기
가장 상위에 있는 컴포넌트로 가서
MyContext 안에 Provider라는 컴포넌트 있음 -> 이거 사용해서 감싸주고 -> value값 넣어주면 됨
function ContextSample() {
return (
<MyContext.Provider value="Good">
<GrandParent text='Good' />
</MyContext.Provider>
)
}
text 변수에 대한건 모두 지워도 된다.
5. value값 유동적으로 변환시키기
1) useState선언
import React, { createContext, useContext, useState } from 'react';
2) useState 적용
function ContextSample() {
const [value, setValue] = useState(true);
return (
<MyContext.Provider value={value ? "Good" : "bad"}>
<GrandParent />
<button onClick={() => setValue(!value)}>
CLICK ME
</button>
</MyContext.Provider>
)
}

마지막 코드
import React, { createContext, useContext, useState } from 'react';
const MyContext = createContext('defaultValue');
function Child() {
const text = useContext(MyContext);
return <div>안녕하세요? {text}</div>
}
function Parent() {
return <Child/>
}
function GrandParent() {
return <Parent/>
}
function ContextSample() {
const [value, setValue] = useState(true);
return (
<MyContext.Provider value={value ? "Good" : "bad"}>
<GrandParent />
<button onClick={() => setValue(!value)}>
CLICK ME
</button>
</MyContext.Provider>
)
}
export default ContextSample;
React - Userdispatch Context
React - Context API(전역 값 관리) 이전 코드들에서 UserList는 다리 역할만 하고 있음 User 컴포넌트로 onRemove와 onToggle을 전달하기 위해서 UserList컴포넌트에선 쓰지 않지만 내부에 적어줬음 - UserList.j..
startersdev.tistory.com