javascript - Redux + react + FireBase : how to use a state when updating

标签 javascript reactjs firebase firebase-realtime-database redux

大家好:)

我从 Firebase && Redux 开始,我遇到了一些关于 firebase.database().ref() 回调函数的问题公式

function getAll() {

    const uid = JSON.parse(localStorage.getItem('user'))
        .uid;


    const dbRef = firebase.database()
        .ref().child('events');

    const userRef = dbRef.child(uid);

    let answer = [];

    userRef.on('value', snap => {
        let rx = snap.val();
        for (let item in snap.val()) {
            answer.push(rx[ item ]);
        }
    });

    return Promise.resolve({
        events: answer
    });
}

我在做什么?

我在调用此服务之前创建了一些操作(触发器),并且此方法必须在结果与缩减器一起保存在 store 中之前触发。

这是预期的。 但是,...

我的实际情况是什么?

  • 该方法及时触发,好新:-) 但是
  • 回调(原样)在(11.5s)几秒后触发,而 redux 本身,非常快的单位,同时开火并使用react渲染。简而言之,在 firebase 回调返回一个值之前,组件会被渲染很多次。

在最后,我需要渲染,重新加载页面,更改到应用程序的另一个路由,以便可以将保存的更改应用到渲染。

因为我是从 reduxfirebase 开始的,所以我不是 100%(但只有 70%) 确定这个推论,但它们是我在这种情况下能找到的更好的方法。

那情况呢?

我现在非常需要任何帮助,感谢您能为我提供的任何帮助:)

最佳答案

嘿,伙计,我今年 1 月开始使用 Firebase 做了一个完整的项目,我知道寻找信息的困难。

您的问题的答案是您需要使用传奇。

https://github.com/redux-saga/redux-saga

Sagas 是一种同步您的 API 调用的方法,因此它们会在您的 reducer 分派(dispatch)操作之前被调用,并使得控制同步 API 调用成为可能。

例如,

function* addAnswer{
    const user = yield call(Api.addAnswer, action.payload.userId); 
    yield put({type: "REQUEST_USER_ANSWER_SUCCEEDED", user: user});
}

Sagas 在继续之前会等待调用以 yield 结束。然后将此函数绑定(bind)到一个操作。

function* mySaga() {
    yield takeEvery("REQUEST_USER_ANSWER", fetchUser);
}

然后您将 redux-saga 中间件添加到您的商店

const sagaMiddleware = createSagaMiddleware() //挂载到 Store const store = createStore( reducer , 应用中间件(传奇中间件) )

基本上,这里发生的是每次你回答你想要绑定(bind)到 saga 操作 REQUEST_USER_ANSWER ,然后如果成功触发 REQUEST_USER_ANSWER_SUCCEEDED 你希望你的 reducer 也被绑定(bind)。这样您就知道只有在 API 调用完成并成功时才会触发 reducer。

人们在他们的项目中使用 Saga 或 Thunk,它们提供相同的工作,但您绝对需要其中之一。

关于javascript - Redux + react + FireBase : how to use a state when updating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50119837/

相关文章:

javascript - 如何通过使用属性(n)的密码请求获取 Node ID?

javascript - 如何仅在具有相同 ID 时修改状态

android - onActivityResult 返回 Intent 数据 null Firebase Auth

reactjs - 在 React 中从 Firebase 实时数据库嵌入动态 Youtube

javascript - 将强度点数组转换为标记

javascript - 类型错误 : Cannot read property 'id' of undefined in nodejs

javascript - Swiper slider 不会为 slider 布局加载多个 View

javascript - react : TypeError: Cannot read property 'setState' of undefined

reactjs - 如何使用客户端时区在 React SSR 渲染页面中格式化时间?

firebase - 预期为 'Map<String, dynamic>' 类型的值,但得到了 'Null' 类型的值