Javascript Redux+;反应+;FireBase:更新时如何使用状态 大家好:)
我从Firebase&&Redux开始,我对公式中的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.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
,但我不知道为什么。再次感谢!不客气,如果您满意,请接受答案!