Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux存储不使用firebase实时数据库上创建的数据更新状态_Javascript_Reactjs_Redux_React Redux_Redux Saga - Fatal编程技术网

Javascript Redux存储不使用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=>{ 返回{ 类型:

我已经设置了我的firebase函数,它工作得非常好。我的应用程序的数据流如下所示:

  • 用户填写表单并提交{works}
  • 数据被发送到实时数据库{works}
  • 然后,通过侦听数据库ref.{not work},将数据传回redux存储
  • 然后,数据将显示在redux存储区的表格中,供用户查看其提交的信息。{不工作,因为3不工作}
  • 我遇到的问题是3号

    这是我的Redux操作文件:

    导入{
    保存表单,
    更新存储
    }从“/类型”;
    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。