React 컨텍스트 소개
14466 단어 tutorialbeginnersreactjavascript
React Context를 사용하는 방법에 대해 알아보기 전에 먼저 이 기능이 처음에 생성된 이유에 대해 알아보겠습니다. React 애플리케이션은 일반적으로 상위 및 하위 관계가 있는 여러 구성 요소로 구성됩니다. 즉, "props"를 사용하여 부모 구성 요소의 데이터가 자식 구성 요소로 전달됩니다.
Unidirectional data flow is one of main concept of react, in nutshell changing state on a component will never affect its parent or its siblings, only the children will be affected.
이 패턴을 사용하면 코드를 더 쉽게 디버깅할 수 있고 오류가 덜 발생하므로 코드에 대한 확신을 가질 수 있습니다. 그러나 구성 요소 간에 공유해야 하는 하위 구성 요소의 데이터가 있는 경우 상태는 가장 가까운 상위 구성 요소에 있어야 합니다lifted up.
그러나 큰 응용 프로그램에서는 매우 빠르게 지저분해질 수 있습니다. 일부 API를 호출하기 위해 깊게 중첩된 구성 요소에 사용자 토큰을 전달해야 한다고 상상해 보십시오.
const { useState, useEffect } from 'react';
const { getToken, getData } from './API/auth';
const App = () => {
const [token, setToken] = useState(null);
useEffect(() => {
const userAuth = async () => {
const _token = await getToken();
setToken(_token)
}
}, [])
return <Dashboard token={token} />
}
const Dashboard = ({token}) => {
return (
<div>
<h1>My Dashboard</h1>
<UserSummary token={token} />
</div>
)
}
const UserSummary = ({token}) => {
const [userData, setUserData] = useState(null);
useEffect(() => {
const fetchUserData = async (t) => {
const _userData = await getData(t);
setUserData(_userData);
}
if (token) fetchUserData(token)
}, [token])
return(
{
!userData ? <h1>Loading...</h1> : <h1>{JSON.stringify(userData, null, 2)}</h1>
}
);
}
위의 고안된 코드를 살펴보겠습니다.
UserSummary
사용자 데이터를 가져오려면 구성 요소에 토큰이 필요합니다. 그러나 이를 위해서는 App
구성 요소에서 생성된 토큰이 필요합니다. 토큰을 소품으로 Dashboard
에 전달한 다음 다시 UserSummary
구성 요소에 전달합니다.위의 예에서 우리는
Dashboard
구성 요소가 실제로 token
prop을 필요로 하지 않는다는 것을 알고 있습니다. 그러나 UserSummary
는 Dashboard
구성 요소의 자식이므로 token
를 통해 Dashboard
를 전달해야 합니다. 중첩된 구성 요소의 수준이 1~2개만 있으면 괜찮아 보일 수 있습니다. 그러나 실제 시나리오에서는 필요할 수 있는 앱의 많은 구성 요소에 대해 token
가 필요할 수 있습니다. 모든 장소에 token
소품을 전달할 예정입니까? 이 문제는 소품 드릴링으로 알려져 있습니다 🛠컨텍스트를 구조에 반응
React Context를 사용하면 각 수준에서 수동으로 소품을 전달하지 않고도 부모 구성 요소에서 자식 구성 요소로 구성 요소 트리를 통해 데이터를 전달할 수 있습니다.
React Context를 사용하는 방법에는 네 가지 단계가 있습니다.
createContext()
를 사용하여 컨텍스트를 만듭니다. value
속성을 사용하여 기본값을 설정합니다. useContext
후크를 사용하여 컨텍스트 값을 가져옵니다. 위의 예제를 React Context를 사용하도록 변환해 봅시다.
const { useState, useEffect, createContext, useContext } from 'react';
const { getToken, getData } from './API/auth';
export const TokenContext = React.createContext();
const App = () => {
const [token, setToken] = useState(null);
useEffect(() => {
const userAuth = async () => {
const _token = await getToken();
setToken(_token)
}
}, [])
return (
<TokenContext.Provider value={token}>
<Dashboard />
</TokenContext.Provider>
)
}
const Dashboard = ({token}) => {
return (
<div>
<h1>My Dashboard</h1>
<UserSummary />
</div>
)
}
const UserSummary = ({token}) => {
const value = React.useContext(TokenContext);
const [userData, setUserData] = useState(null);
useEffect(() => {
const fetchUserData = async (t) => {
const _userData = await getData(t);
setUserData(_userData);
}
if (token) fetchUserData(token)
}, [token])
return(
{
!userData ? <h1>Loading...</h1> : <h1>{JSON.stringify(userData, null, 2)}</h1>
}
);
}
위의 예에서 새 컨텍스트를 만들고
TokenContext
변수로 저장합니다. App
에서 Provider
를 사용하여 TokenContext
구성 요소를 래핑하고 초기 값을 제공합니다. 우리의 경우는 token
입니다. 마지막으로 useContext()
후크를 사용하여 token
구성 요소에서 컨텍스트 값(UserSummary
)을 얻습니다.React Context를 사용하면 코드가 훨씬 더 간결해집니다. 또한 소품 드릴링 문제를 제거합니다. React 컨텍스트 외에도 전역 상태 관리인 Redux 또는 MobX과 같은 다른 옵션을 사용할 수 있습니다.
일반적으로 전역적으로 관리해야 하는 상태의 양이 많지 않고 상태가 자주 업데이트되지 않는 경우 Redux 대신 React Context를 사용해야 합니다. 그러나 많은 양의 상태를 관리하고 자주 업데이트하는 경우 Redux 사용을 고려할 수 있습니다.
이 짧은 기사가 React를 배우는 여정에 도움이 되기를 바랍니다 🍻
Reference
이 문제에 관하여(React 컨텍스트 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yohanesss/introduction-of-react-context-1b5g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)