React에서 useReducer 후크가 있는 prevState.
9914 단어 reactprevstatehooksusereducer
이것이 당신 중 일부에게 도움이되기를 바랍니다. :)
import React, {
createContext,
useReducer,
useContext,
useEffect,
useRef,
} from 'react';
/* ******* */
/* Reducer */
/* ******* */
function reducer(state, action) {
switch (action.type) {
case 'LOGIN':
return {
...state,
isLoggedIn: true,
};
default:
return state;
}
}
const StateContext = createContext({});
const DispatchContext = createContext({});
const PrevStateContext = createContext({});
const StateContainer = (Context) => {
const context = useContext(Context);
if (context === undefined) {
throw new Error('Context must be used within a Provider');
}
return context;
};
const DispatchContainer = (Context) => {
const context = useContext(Context);
if (context === undefined) {
throw new Error('Context must be used within a Provider');
}
return context;
};
const PrevStateContainer = (Context) => {
const context = useContext(Context);
if (context === undefined) {
throw new Error('Context must be used within a Provider');
}
return context;
};
const AppContextProvider = (props) => {
const { children } = props;
const [state, dispatch] = useReducer(reducer, {
isLoggedIn: false,
});
function usePrevious(value: any) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
let prev = usePrevious(state);
return (
<StateContext.Provider value={state}>
<DispatchContext.Provider value={dispatch}>
<PrevStateContext.Provider value={prev === undefined ? {} : prev}>
{children}
</PrevStateContext.Provider>
</DispatchContext.Provider>
</StateContext.Provider>
);
};
const useAppContext = () => {
return [
StateContainer(StateContext),
DispatchContainer(DispatchContext),
PrevStateContainer(PrevStateContext),
];
};
export { AppContextProvider, useAppContext };
Reference
이 문제에 관하여(React에서 useReducer 후크가 있는 prevState.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ivanjeremic/prevstate-with-usereducer-hook-in-react-4819텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)