Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql useSelector函数未更新后调度函数-react钩子的状态_Mysql_Reactjs_Redux_React Redux_React Hooks - Fatal编程技术网

Mysql useSelector函数未更新后调度函数-react钩子的状态

Mysql useSelector函数未更新后调度函数-react钩子的状态,mysql,reactjs,redux,react-redux,react-hooks,Mysql,Reactjs,Redux,React Redux,React Hooks,我正在执行一个身份验证模块,当我单击“登录”按钮时,我正在验证当前用户是否为MySQL db。我正在登录页面中将函数发送到此处 基本上,当我分派它时,rSignedIn的null状态在分派函数之后不会立即改变。我完全是在用鱼钩。请帮我解决这个问题,我已经试了三天了 但是当我再次单击login按钮时,rSignedIn状态值会更新。通常,当我使用useSelector使用状态值时,该值会在调用handleLogin()时第二次更新 //Sign in Page ... ... const st

我正在执行一个身份验证模块,当我单击“登录”按钮时,我正在验证当前用户是否为MySQL db。我正在登录页面中将函数发送到此处

基本上,当我分派它时,rSignedIn的null状态在分派函数之后不会立即改变。我完全是在用鱼钩。请帮我解决这个问题,我已经试了三天了

但是当我再次单击login按钮时,rSignedIn状态值会更新。通常,当我使用useSelector使用状态值时,该值会在调用handleLogin()时第二次更新

//Sign in Page

...
...

const status=useSelector((state)=>state);
...
...
const handleLogin=(event)=>{
      dispatch(LoginUser(loginData));
      console.log(status.auth.rSignedIn);
      if(status.auth.rSignedIn){
        console.log("LOGIN success");
        History.push('/');
      }else{
        console.log("LoginFailed") ;
      }
    }

这是我向MySQL db发送请求的操作索引页面,如果有响应,我将发送一个错误

export const LoginUser=(loginData)=>async(dispatch)=>{
    await mysqlDB.post('/fetch/retreive',loginData)
    .then((response)=>dispatch({type:ActionTypes.LOGIN_SUCCESS,payload:response.data}))
    .catch((error)=>dispatch({type:ActionTypes.LOGIN_FAILED}))
}
这是我的减速机:

const initialState = {
    gSignedIn:null,
    userId:null,
    registered:null,
    data:null,
    rSignedIn:null,
}


export default (state=initialState,action)=>{
    switch (action.type){
        case ActionTypes.GSIGN_IN:
            return {...state,gSignedIn:true,userId: action.payload};
        case ActionTypes.GSIGN_OUT:
            return {...state,gSignedIn:false,userId:null};
        case ActionTypes.REGISTER_SUCCESS:
            return {...state,registered:true,data: action.payload};
        case ActionTypes.REGISTER_FAILED:
            return {...state,registered:false,data:null};
        case ActionTypes.LOGIN_SUCCESS:
            return {...state,rSignedIn:true,data: action.payload};
        case ActionTypes.LOGIN_FAILED:
            return {...state,rSignedIn:false,data:null};
        case ActionTypes.LOGOUT:
            return {...state,rSignedIn:false,data:null};
        default:
            return state;
    }
};

dispatch
不会立即更新您的状态值。状态值由闭包绑定,仅在下一个渲染周期中更新

您可以使用
历史记录。在
操作中按
,也可以使用useEffect

const handleLogin=(event)=>{
      dispatch(LoginUser(loginData, History));
    }


使用useEffect,您只需要在更改时运行,而不需要在初始渲染时运行

const initialRender = useRef(true);
useEffect(() => {
   if(!initialRender.current) {
       if(state.auth.rSignedIn) {
           history.push('/');
        } else {
           console.log(not signed in);
        }
   } else {
       initialRender.current = false;
   }
}, [state.auth.rSignedIn])

但是如果我想在同一页中呈现state值呢?而且正如你说的使用useEffect我使用过一次,当我点击登录页面时,它会重定向到主页,但它没有进入登录页面,useEffect的使用不允许我进入登录页面,可能是我的语法错误,你能帮我使用useEffect函数吗?你可以在返回部分回复要更新的状态值,这样你就可以渲染它了。只是不要在同一个函数中使用它,希望它被更新,但是如果我想在同一个页面中呈现状态值呢?而且正如你说的使用useEffect我使用过一次,当我点击登录页面时,它会重定向到主页,但它没有进入登录页面,useEffect的使用不允许我进入登录页面,可能是我的语法错误,你能帮我使用useEffect功能吗?更新了我的帖子,告诉我你将如何使用useEffect
const initialRender = useRef(true);
useEffect(() => {
   if(!initialRender.current) {
       if(state.auth.rSignedIn) {
           history.push('/');
        } else {
           console.log(not signed in);
        }
   } else {
       initialRender.current = false;
   }
}, [state.auth.rSignedIn])