Advertisement
image2text

Untitled

Sep 3rd, 2019
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. Y
  2. import React, { useReducer, useCallback, useMemo, useContext } from "react";
  3. import produce from "immer";
  4. export const AppStateContext = React.createContext(null);
  5. const initialState = { user: { firstName: "Some", lastName: "Person" } };
  6. function reducer(draft, action) {
  7. switch (action.type) {
  8. case "setFirstName":
  9. draft.user.firstName = action.first;
  10. return;
  11. case "setlLastName":
  12. draft.user.lastName = action.last;
  13. return;
  14. default:
  15. I
  16. i
  17. export function AppStateProvider({ children }) {
  18. const cachedReducer = useCallback(produce(reducer), [reducer]); // copied from useImmerReducer
  19. const [state, dispatch] = useReducer(cachedReducer, initialState);
  20. const cachedActions = useMemo(() => {
  21. return {
  22. setFirstName: first => dispatch({ type: "setFirstName", first }),
  23. setlLastName: last => dispatch({ type: "setLastName", last })
  24. i
  25. }, [dispatch]);
  26. return (
  27. <AppStateContext.Provider value={[state, cachedActions]}>
  28. RCRA N [Ty
  29. </AppStateContext.Provider>
  30. )4
  31. I
  32. export function useAppState() {
  33. return useContext(AppStateContext);
  34. I
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement