将Firebase与Redux绑定



我正在用firebase构建一个react-redux应用程序。

这是我的动作创建器:

export function fetchUser(uid) {
  let ref = firebase.database().ref('users/' + uid)
  return dispatch => {
    ref.on("value", (snapshot) => {
      let obj = snapshot.val()
      dispatch({
        type: FETCH_USER,
        payload: obj
      })
    })
  }
}

在我的React组件中,我希望能够链接它并连接另一个动作。比如:

componentWillMount() {
      let userId = 'some user id'
      this.props.fetchUser(userId).then(()=> {
        this.props.updateUser() // perform another action after the fetch is complete
      })
}

我很难做到这一点。

  • 一个问题是Firebase on事件监听器没有实现承诺接口。
  • 我不想移动fetchUser行动内部的后续行动作为其他组件可以调用fetchUser以及其他目的。

我觉得这应该是直接的,但我是新手redux和firebase,所以所有的帮助将不胜感激。

您没有从firebase返回承诺的事实似乎并不是您的问题。你可以在你的动作创建器中返回一个承诺,然后使用它的分辨率在你的componentWillMount()中启动.then()。我们做了这样的事情:

export function fetchUser(uid) {
  let ref = firebase.database().ref('users/' + uid);
  return dispatch => {
    return new Promise( ( resolve, reject ) => {
      ref.on("value", (snapshot) => {
        let obj = snapshot.val();
        dispatch({
          type: FETCH_USER,
          payload: obj
        });
        resolve();
      })
    });
  }
}

同样,如果你想从firebase得到承诺,你可以使用.once()。这实际上可能更适合您,这样您就不会在/users ref.

上有一个永久的侦听器。

相关内容

  • 没有找到相关文章

最新更新