Javascript Redux存储不使用firebase实时数据库上创建的数据更新状态
我已经设置了我的firebase函数,它工作得非常好。我的应用程序的数据流如下所示:Javascript Redux存储不使用firebase实时数据库上创建的数据更新状态,javascript,reactjs,redux,react-redux,redux-saga,Javascript,Reactjs,Redux,React Redux,Redux Saga,我已经设置了我的firebase函数,它工作得非常好。我的应用程序的数据流如下所示: 用户填写表单并提交{works} 数据被发送到实时数据库{works} 然后,通过侦听数据库ref.{not work},将数据传回redux存储 然后,数据将显示在redux存储区的表格中,供用户查看其提交的信息。{不工作,因为3不工作} 我遇到的问题是3号 这是我的Redux操作文件: 导入{ 保存表单, 更新存储 }从“/类型”; export const saveForm=user=>{ 返回{ 类型:
导入{
保存表单,
更新存储
}从“/类型”;
export const saveForm=user=>{
返回{
类型:保存表单,
有效载荷:用户
};
};
export const updateStore=数据=>{
返回{
类型:更新存储,
有效载荷:数据
};
};
这是我的减速机:
导入{
保存表单,
更新存储
}来自“./动作/类型”;
常量初始状态={
用户:[],
db:“”
};
导出默认函数(状态=初始状态,操作){
开关(动作类型){
案例保存表格:
返回{
……国家,
用户:[action.payload]
};
案例更新存储:
返回{
db:[动作.有效载荷]
};
违约:
返回状态;
}
}
最后是我的传奇档案:
导入{
数据库
}从“/firebase配置”
从“axios”导入axios
进口{
放,
叉
拿下,
拿
}来自“重演传奇/效果”
进口{
事件频道
}摘自《红魔传奇》
进口{
保存表单,
更新存储
}来自“/actions/types”
导出函数*发送请求({
有效载荷
}) {
//控制台日志(有效载荷);
屈服轴柱https://dummy.com/user,有效载荷)
。然后(res=>{
//下面是代码
console.log(res)
})
.catch(错误=>{
console.log(错误);
});
};
导出函数*watchSendAction(){
收益率(保存表单、发送请求);
}
函数createEventChannel(){
const listener=eventChannel(emit=>{
database.ref('entries/users')。在('value',data=>emit(data.val());
return()=>database.ref('entries/users').off(侦听器);
});
返回侦听器;
}
//这应该用数据库接收的数据更新我的存储
函数*startListener(){
const updateChannel=createEventChannel();
while(true){
const data=产量takeEvery(updateChannel);
收益投入(更新存储(数据));
}
}
导出默认函数*helloSaga(){
屈服叉(观察动作);
屈服叉(施力器);
}
我似乎不知道我做错了什么。我怀疑问题出在你的
startListener
传奇中。您应该使用while cycle和take
效果,或者使用takeEvery
而不使用while cycle。现在你正在把两者混合在一起
试试这个:
function* startListener() {
const updateChannel = createEventChannel();
while (true) {
const data = yield take(updateChannel);
yield put(UPDATE_STORE(data));
}
}
或者这个:
function* startListener() {
const updateChannel = createEventChannel();
yield takeEvery(updateChannel, function*(data) {
yield put(UPDATE_STORE(data));
});
}
首先,你的reducer
UPDATE\u STORE
与你的初始状态不一样,你能修复它以反映你的有效载荷吗?我不明白你的意思@AbdeenM。