Javascript 是否可以从钩子内部导出状态值?
我有以下的钩子:Javascript 是否可以从钩子内部导出状态值?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有以下的钩子: const useAuth = () => { const [auth, setAuth] = useState({ isAuthenticated: false, accountType: 'anonymous', userId: '', email: '' }); const signIn = () => { // Do something... setAuth({ isAuthenti
const useAuth = () => {
const [auth, setAuth] = useState({
isAuthenticated: false,
accountType: 'anonymous',
userId: '',
email: ''
});
const signIn = () => {
// Do something...
setAuth({
isAuthenticated: true,
accountType: 'email',
userId: 'abc123',
email: 'foo@bar.com'
});
}
return {
signIn,
auth
};
};
export default useAuth;
如您所见,我正在导出auth
状态值,但它似乎不起作用。在我使用这个钩子的组件中,auth
的值是原始值:
{
isAuthenticated: false,
accountType: 'anonymous',
userId: '',
email: ''
}
即使我调用signIn()
方法,该方法应将此值更新为:
{
isAuthenticated: true,
accountType: 'email',
userId: 'abc123',
email: 'foo@bar.com'
}
更新的值没有到达使用钩子的组件(即使它成功地更新了钩子中的状态值),如何使用钩子在组件中获取更新的值?调用
signIn()
后如何检查auth
的值?由于setAuth()
(在signIn内部调用)可以是异步的,因此您可能正在更新auth
之前记录它?为了确认调用signIn()
后auth
被成功更新,我有`useffect(()=>{console.log('[auth updated]',auth);},[auth])`在钩子里面。我只是查看最后一个控制台日志,在使用钩子的组件中,我有const{auth,signIn}=useAuth()
并使用auth
作为上下文提供程序的值。我在react devtools context viewer中看不到更新的值,我还在渲染中查看了日志auth
,并且在值更新后看不到任何重新渲染。您谈论的是某种身份验证上下文提供程序。听起来您有两个独立的auth
状态。我使用钩子中的auth
状态值作为auth上下文的值。钩子管理上下文的值。调用signIn()
后,如何检查auth
的值?由于setAuth()
(在signIn内部调用)可以是异步的,因此您可能正在更新auth
之前记录它?为了确认调用signIn()
后auth
被成功更新,我有`useffect(()=>{console.log('[auth updated]',auth);},[auth])`在钩子里面。我只是查看最后一个控制台日志,在使用钩子的组件中,我有const{auth,signIn}=useAuth()
并使用auth
作为上下文提供程序的值。我在react devtools context viewer中看不到更新的值,我还在渲染中查看了日志auth
,并且在值更新后看不到任何重新渲染。您谈论的是某种身份验证上下文提供程序。听起来您有两个独立的auth
状态。我使用钩子中的auth
状态值作为auth上下文的值。钩子管理上下文的值。