在Redux中,如何使状态生效?

时间:2019-03-16 08:12:18

标签: react-native redux react-redux

在下面的示例中,从Firebase获取数据后,我想添加已存在于redux存储中的用户对象,并将其附加到所有消息对象中。要求您的帮助。

问题:

  1. 访问动作创建者中的状态是一种好方法吗?如果是,怎么办?
  2. 如果没有,还有什么选择?
db.collection(`messages/${documentId}/chat`)
  .get()
  .then(snapshot => {
    const messages = [];
    snapshot.docs.forEach(doc => {
    console.log("message", doc.id, doc.data());
    messages.push({
      id: doc.id,
      from: doc.data().from,
      to: doc.data().to,   
      text: doc.data().text,
      timestamp: doc.data().timestamp.seconds * 1000
    });
  });
  dispatch({ type: GET_CHAT, payload: messages });
});

2 个答案:

答案 0 :(得分:1)

简单地。 从“ ..path / to / your / createStore / export”导入商店。

然后在动作内部或无法使用redux的connect方法订阅组件的任何地方使用它。

store.getState()//将返回整个商店对象。

其他有用的方法来分派动作; store.dispatch(动作名称)。

最后,在紧急情况下应使用soter.getState()。 为您的用例。 大多数情况下,我们使用动作参数。并将数据作为动作参数传递。我们从那里派遣行动。来自订阅了redux store的某个组件。在那里,我们将通过mapStateToProps方法访问存储对象。

export const successBuy = data => {
let request = axios
.post(`/api/users/successBuy`, data)
.then(response => response.data);
return {
type: actionTypes.SET_CURRENT_USER,
payload: request
 };
};

答案 1 :(得分:1)

如果您使用Redux Thunk中间件,则可以简单地做到这一点:

const myAction = () => async (dispatch, getState) => {
  const { field1, field2 } = getState().myReducer;
};