【问题标题】:Handling Auth State using Redux使用 Redux 处理身份验证状态
【发布时间】:2017-03-27 22:33:36
【问题描述】:

我有一个使用 React、Redux 和 Firebase 的聊天应用。我还使用 thunkmiddleware 使用 Firebase 进行状态的异步更新。 我成功地得到了我需要的一切,除了一切都取决于以前硬编码的变量。

问题是,我如何在我的 ActionCreators 中调用 getState() 方法来检索我需要的状态值来填充我的其余状态?

我目前有我的身份验证:{ uid = 'XXXZZZYYYY' }..。我只需要这样称呼它

getState().auth.uid

然而这根本不起作用。

我尝试了很多不同的问题,使用 mapDispatchToProps 等。如果需要,我可以显示我的 repo。

值得一提的是,我尝试关注另一个问题但没有成功。 Accessing Redux state in an action creator? 这是我当前的相关代码:

const store = createStore(  
    rootReducer,
    defaultState,
    applyMiddleware(thunkMiddleware));

还有

function mapDispatchToProps(dispatch) {
    watchFirebase(dispatch); // to dispatch async Firebase calls
    return bindActionCreators(actionCreator, dispatch);
}  
const App = connect(mapStateToProps, mapDispatchToProps)(AppWrapper);

我正在正确导出,因为许多其他 not pure 函数正常工作。 例如,这可以正常工作:

export function fillLoggedUser() {  
      return (dispatch, getState) => {
      dispatch({
        type: C.LOGGED_IN,
      });
    }
  }

然而,正如下面所建议的,这不起作用:

const logState = () => ( dispatch, getState ) => {  
       console.log(getState());  
  };  

【问题讨论】:

  • 正如您链接的 SO 答案中所建议的那样,最简单的方法是使用 redux-thunk。如果您已经尝试过,请发布一些代码,以便我们可以帮助您解决您的具体问题。

标签: reactjs firebase redux


【解决方案1】:

一般来说,您的 thunked 动作创建者应该如下所示(我使用帖子 ID 作为示例参数):

const getPost = ( postId ) => ( dispatch, getState ) => {
    const state = getState();
    const authToken = state.reducerName.authToken;
    Api.getPost(postId, authToken)
    .then(result => {
        // where postRetrieved returns an action
        dispatch(postRetrieved(result));
    });
};

如果这与您所拥有的相似,那么我会记录您的状态,并通过一个简单的 thunk 来查看发生了什么。

const logState = () => ( dispatch, getState ) => {
    console.log(getState());
};

【讨论】:

  • 这个日志在我的 actioncreator.js 文件中似乎没有做任何事情。我不明白为什么。我认为这是我的主要问题。
  • 是否调用了console.log,但没有记录?还是从未调用过?
  • 永远不会被调用。另外,当我尝试以另一种方式调用 getState() 时,我发现 getState() 不是一个函数。
猜你喜欢
  • 2017-08-09
  • 2018-08-15
  • 2018-03-24
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2020-12-23
  • 2020-10-06
相关资源
最近更新 更多