useApp.jsx 845 B

1234567891011121314151617181920212223242526272829303132333435
  1. import React from "react";
  2. const localStorageKey = "usr_jwt";
  3. const AppContext = React.createContext();
  4. export function AppProvider(props) {
  5. const [token, setToken] = React.useState(null);
  6. React.useEffect(() => {
  7. const jwt = localStorage.getItem(localStorageKey);
  8. setToken(jwt);
  9. }, []);
  10. React.useEffect(() => {
  11. if (token && token !== "") {
  12. localStorage.setItem(localStorageKey, token);
  13. }
  14. }, [token]);
  15. const memData = React.useMemo(() => {
  16. return { token, setToken };
  17. }, [token, setToken]);
  18. return <AppContext.Provider value={memData} {...props} />;
  19. }
  20. export function useApp() {
  21. const context = React.useContext(AppContext);
  22. if (!context) {
  23. // eslint-disable-next-line no-throw-literal
  24. throw "error: app context not defined.";
  25. }
  26. return context;
  27. }