React Context API 및 useReducer , 파트 2
3254 단어 hooksjavascriptcontextreact
2부에서는 애플리케이션 전체에서 상태를 유지하기 위해 useReducer 후크를 사용하는 방법을 살펴보겠습니다. 그리고 React Context API를 사용하여 해당 상태를 전체 애플리케이션에 전달합니다.
ProductsProvider 구성 요소에 useReducer를 추가하여 시작합니다.
//products_context.js
import React, {useReducer} from "react";
import reducer from "../products_reducer";
export const ProductsProvider = ({ children }) => {
const initialState = {
productsLoading: false,
products: [],
};
const [state, dispatch] = useReducer(reducer, initialState);
return (
<ProductContext.Provider value={}>
{children}
</ProductContext.Provider>
);
};
useReducer 의 부분을 설명하기 위해 현재 상태인 state , type 을 받는 dispatch , type 은 reducer에게 어떤 조치를 취해야 하는지 알려주는 payload , 그리고 payload 는 reducer에 전달될 데이터입니다. reducer 는 함수입니다. 디스패치 유형에 따라 상태를 수정하는 방법을 결정하고 마지막으로 자체 설명이 가능한 initialState가 있습니다.
그것으로 감속기 기능을 정의합시다.
//products_reducer.js
const products_reducer = (state, action) => {
if (action.type === "GET_PRODUCTS_BEGIN") {
return { ...state, productsLoading: true };
}
if (action.type === "GET_PRODUCTS_SUCCESS") {
return {
...state,
productsLoading: false,
products: action.payload,
};
}
};
export default products_reducer;
우리의 리듀서 함수는 currentState와 action이라는 2개의 인자를 받습니다. 본질적으로 당신의 action은 dispatch입니다. 감속기는 작업 유형을 확인하고 작업 유형에 따라 업데이트된 상태를 반환합니다.
그렇다면 리듀서가 상태를 업데이트할 수 있도록 올바른 유형을 제공하기 위해 어떻게 디스패치를 사용할 수 있을까요? products_context.js로 돌아가 useReducer를 정의한 ProductsProvider 함수로 갑시다.
//products_context.js
export const ProductsProvider = ({ children }) => {
const [state, dispatch] = useReducer(reducer, initialState);
const fetchProducts = async () => {
dispatch({ type: GET_PRODUCTS_BEGIN });
let response = {};
try {
response = await axios.get(url);
let products = response.data;
dispatch({ type: GET_PRODUCTS_SUCCESS, payload: products })
} catch (error) {
console.log({ error });
}
};
return (
<ProductContext.Provider value={{ ...state , fetchProducts }}>
{children}
</ProductContext.Provider>
);
};
우리의 fetchProducts 함수에서 우리는 우리의 상태를 수정하기 위해 디스패치 함수를 사용합니다. 두 번째 디스패치에서 API 호출의 응답을 페이로드로 디스패치에 전달합니다. 그러면 "GET_PRODUCTS_SUCCESS"유형의 감속기 함수에서 해당 페이로드 값이 사용됩니다.
마지막으로 우리는 상태를 ProductContext.Provider 의 값 소품으로 확산하므로 상태가 업데이트될 때마다 이 상태 값을 사용하는 구성 요소가 다시 렌더링됩니다.
//products_context.js
<ProductContext.Provider value={{ ...state , fetchProducts }}>
{children}
</ProductContext.Provider>
여기 제품 표시 페이지에서 상태 값을 분해하고 그에 따라 데이터를 표시하는 데 사용할 수 있습니다.
//Product.js Page
import { useProductContext } from "../products_context";
const { products , productsLoading , fetchProducts } = useProductContext();
이것으로 React Context API 및 useReducer 시리즈를 마칩니다. 이 게시물에서 무언가를 배웠기를 바랍니다. 애플리케이션에서 상태를 처리하는 방법을 아래 주석에 공유하십시오.
Reference
이 문제에 관하여(React Context API 및 useReducer , 파트 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/terenvelan/react-context-api-usereducer-part-2-o7g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)