Javascript Redux+;反应+;FireBase:更新时如何使用状态 大家好:)

Javascript Redux+;反应+;FireBase:更新时如何使用状态 大家好:),javascript,reactjs,firebase,firebase-realtime-database,redux,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 = dbR

我从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
    });
}
我在干什么? 我已经创建了一些调用此服务的操作(触发器),在使用
存储中的还原程序保存结果之前,必须触发此方法

这是人们所期望的。但是

我的现实是什么?
  • 方法及时触发,好新:-)但是
  • 回调
    (按原样)在(
    1
    1.5s
    )几秒钟后触发,而
    redux
    本身,非常快速的单元,同时触发并进行react渲染。简言之,在firebase回调返回值之前,会对组件进行大量渲染
在最后,我需要渲染,重新加载页面,更改应用程序的另一个路径,以便保存的更改可以应用于渲染

因为我是从redux和firebase开始的,所以我不能
100%
(但只能
70%
)确定这些扣减,但在这种情况下,它们是我能找到的更好的扣减

那么情况如何?
我现在渴望得到任何帮助,谢谢你能为我提供的任何帮助:)

嘿,伙计,今年一月我开始与Firebase合作,做了一个完整的项目,我知道寻找信息的斗争

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

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

比如说,

function* addAnswer{
    const user = yield call(Api.addAnswer, action.payload.userId); 
    yield put({type: "REQUEST_USER_ANSWER_SUCCEEDED", user: user});
}
传奇故事将等待电话在收益率上结束,然后再继续。然后将此函数绑定到一个操作

function* mySaga() {
    yield takeEvery("REQUEST_USER_ANSWER", fetchUser);
}
您可以将redux saga中间件添加到您的应用商店中

const sagaMiddleware=createSagaMiddleware()
//把它挂在商店里
const store=createStore(
减速器,
applyMiddleware(sagaMiddleware)
)

基本上,这里发生的是每次你回答你想要绑定到saga action REQUEST\u USER\u answer,如果成功,就会触发REQUEST\u USER\u answer\u Succeed,你也想要绑定你的reducer。这样,您就知道只有在API调用完成并成功时,才会触发reducer


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

非常好!我会研究这个方法。非常感谢您快速的回答。虽然我安装了
redux-thunk
,但我不知道为什么。再次感谢!不客气,如果您满意,请接受答案!