挂钩用户介绍2次



我有一个authentication.reducer.js

export default function(state = initialState, action ){
switch(action.type) {
    case SET_CURRENT_USER:
        return {
            ...state,
            isAuthenticated: !isEmpty(action.payload),
            user: action.payload
        }
    default: 
        return state;
}}

和我的提供者上下文带有用户挂钩。以及用于调度动作的使用效果挂钩" setCurrentuser"并设置"等法化"如果客户记录了客户。

import authReducer from "./reducers/authentication.reducer";
...
const [stateUser, dispatch] = useReducer(authReducer, {
    isAuthenticated: false,
    user: {}
});
useEffect(()=>{
    if (localStorage.jwt) {
        const decoded = localStorage.jwt;
      
        dispatch(setCurrentUser(decoded));
    }
},[])

我将console.log(stateuser.isauthenticatienationed)放在我的组件中,这显示了" false"(初始值),然后" true"(调度)。
我需要将状态(stateuser.isauthenticated)传递给其他儿童组件,但不需要传递初始值(" false")。

我有一个仪表板组件(仅适用于用户记录),在我的使用效率下,我需要这样做:

if(!context.stateUser.isAuthenticated) {
        props.history.push('/login');
        
}

和我的登录名:

if(context.stateUser.isAuthenticated) {
        props.history.push('/');
}

这有效。如果我登录并转到"/&quot"没关系,如果我转到"/login",此重定向到"/&quot"。

,但是问题是在调度和用户使用中的重新渲染。状态走了:false-> true,那么它会导致此效果:输入"/&quot" - >"&quord;"" quin(false)" - >>&qut;&quort;"&quort;

如何防止这种效果?/ - >/登录 - >/== enter-> false-> true。我需要:输入 - >true

我的建议是将isAuthenticated设置为 null启动,并且仅在状态明确设置为true或false时才调用历史记录函数:

if (context.stateUser.isAuthenticated === false) {
    props.history.push('/login');
}
if (context.stateUser.isAuthenticated === true) {
    props.history.push('/');
}

确保使用三重等于比较的比较。

这有帮助吗?

编辑

如果您这样做,即使没有用户登录,也需要致电setCurrentUser

useEffect(()=>{
    const decoded = localStorage.jwt ? localStorage.jwt : "";
    dispatch(setCurrentUser(decoded));
},[])

相关内容

  • 没有找到相关文章

最新更新