为什么我没有收到更新的对象?

时间:2021-07-08 15:20:54

标签: reactjs react-hooks

我有以下自定义钩子:

import { useEffect, useState } from 'react';

import { AuthType } from '../types';

export function useAuth() {
  const [ authData , setAuthData ] = useState<AuthType>();

  useEffect(() => {
    if ( authData && authData.JWT ) {
      localStorage.setItem( 'JWT', authData.JWT );
    }
  }, [ authData ]);

  return {
    authData,
    isAuth: authData !== undefined,
    setAuthData
  };
}

我在我的标题中使用它:

export default function Header() {
  const { isAuth, authData } = useAuth();
  console.log(isAuth);
  return <div> {isAuth} </div>;
}

而且我总是得到 false,我在这里做错了吗? 在我的登录组件中,我正在使用 setAuthData 更新我的 authData:

const { setAuthData } = useAuth();

axios.post().then(({ data }) => {
  setAuthData({
    PWT: data.PWT,
    ...
  });
})

1 个答案:

答案 0 :(得分:1)

钩子的每个实例都有自己的状态。

当您在 Header 组件和 Login 组件中使用钩子时,它们不会共享状态。

当您登录组件调用 setAuthData 时,它只会更新返回给登录组件的 authData 变量。返回到 Header 组件的另一个 authData 未受影响。

您需要某种方式在钩子之间共享状态,例如 contextredux store

相关问题