Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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
Javascript 第一次加载时React Redux存储为空_Javascript_Reactjs_React Redux - Fatal编程技术网

Javascript 第一次加载时React Redux存储为空

Javascript 第一次加载时React Redux存储为空,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我有一个登录页面,当提交表单时,它会从服务器返回一个令牌。 如果令牌存在,则不应显示登录表单 然而,当登录页面加载时,存储总是空的,页面显示登录表单,然后填充道具,组件更新 LoginForm.js export const ADD_TOKEN = 'ADD_TOKEN'; export function addToken(token) { return { type: ADD_TOKEN, token, } } export default

我有一个登录页面,当提交表单时,它会从服务器返回一个令牌。 如果令牌存在,则不应显示登录表单

然而,当登录页面加载时,存储总是空的,页面显示登录表单,然后填充道具,组件更新

LoginForm.js

export const ADD_TOKEN = 'ADD_TOKEN';

export function addToken(token) {
    return {
        type: ADD_TOKEN,
        token,
    }
}

export default {}
如您所见,当其中一个表单输入被更新时,它会更新状态,从而导致组件重新加载-很好

  • 加载LoginForm。输入详细信息并提交-工作正常
  • 调用API,获取令牌并将其保存在存储中-工作正常
  • 按F5键,我希望看到“您已经登录”之类的功能。页面在显示文本之前简要显示登录表单
  • 减速器

    import { combineReducers } from 'redux'
    import { ADD_TOKEN } from '../actions';
    
    
    function token(state = null, action){
      if(action.type === ADD_TOKEN){
        return action.token;
      }
    
      return state;
    }
    
    const merchHunter = combineReducers({
      token
    })
    
    export default merchHunter;
    
    let store = createStore(
      merchHunter,
      undefined,
      compose(autoRehydrate()
      )
    );
    
    persistStore(store);
    
    
    ReactDOM.render(
      <Provider store={store}>
      <MuiThemeProvider>
      <App  />
      </MuiThemeProvider>
      </Provider>, document.getElementById('root'));
    registerServiceWorker();
    
    应用程序加载器

    import { combineReducers } from 'redux'
    import { ADD_TOKEN } from '../actions';
    
    
    function token(state = null, action){
      if(action.type === ADD_TOKEN){
        return action.token;
      }
    
      return state;
    }
    
    const merchHunter = combineReducers({
      token
    })
    
    export default merchHunter;
    
    let store = createStore(
      merchHunter,
      undefined,
      compose(autoRehydrate()
      )
    );
    
    persistStore(store);
    
    
    ReactDOM.render(
      <Provider store={store}>
      <MuiThemeProvider>
      <App  />
      </MuiThemeProvider>
      </Provider>, document.getElementById('root'));
    registerServiceWorker();
    
    let store=createStore(
    默克亨特,
    未定义,
    合成(自动水化)
    )
    );
    商店(店);;
    ReactDOM.render(
    ,document.getElementById('root');
    registerServiceWorker();
    
    我没有使用
    redux-persist
    库,但该库不会同步重新水化。你有一个未更新的状态。我在这个图书馆的一次讨论中发现了


    您只需使用
    Promise
    等待
    redux
    状态重新水化,然后再呈现您的应用程序。

    那么您希望redux存储在重新加载页面后保持该状态吗?我刚刚更新了我的问题。基本上,当组件加载时,道具看起来是空的,但是随后填充导致组件重新渲染。你是说道具只有在提交表单后才被填充吗?我应该补充一点,我已经在顶级组件上使用persistStore了。我正在检索令牌,但当在组件呈现时注销令牌时,我会得到1)令牌:null,2)令牌:“12345”与组件呈现相同。请演示如何检索令牌并将其传递给
    redux
    storeOk,下次别忘了提及您还使用了哪些库
    redux persist
    是问题的重要提示:重复我的答案