Redux Store不会使用Firebase实时数据库上的已创建数据更新状态

爱德华·贝拉

我已经设置了我的Firebase函数,并且可以正常运行。我的应用程序的数据流如下:

  1. 用户填写表格并提交{works}
  2. 数据被发送到实时数据库{works}
  3. 然后,通过侦听数据库引用将数据传递回redux存储。{不起作用}
  4. 然后,数据显示在redux存储区中的表中,以供用户查看其提交的信息。{因为3不起作用而无法工作}

我遇到问题的地方是3号。

这是我的Redux操作文件:

import {
  SAVE_FORM,
  UPDATE_STORE
} from "./types";

export const saveForm = user => {
  return {
    type: SAVE_FORM,
    payload: user
  };
};

export const updateStore = data => {
  return {
    type: UPDATE_STORE,
    payload: data
  };
};

这是我的减速器:

import {
  SAVE_FORM,
  UPDATE_STORE
} from "../actions/types";

const initialState = {
  users: [],
  db: ""
};

export default function (state = initialState, action) {
  switch (action.type) {
    case SAVE_FORM:
      return {
        ...state,
        users: [action.payload]
      };

    case UPDATE_STORE:
      return {
        db: [action.payload]
      };
    default:
      return state;
  }
}

最后是我的sagas文件:

import {
  database
} from "./firebase-config"
import axios from "axios"
import {
  put,
  fork,
  takeEvery,
  take
} from 'redux-saga/effects'
import {
  eventChannel
} from "redux-saga"
import {
  SAVE_FORM,
  UPDATE_STORE
} from "./actions/types"

export function* sendRequest({
  payload
}) {
  //console.log(payload);
  yield axios.post('https://dummy.com/user', payload)
    .then(res => {
      // here will be code
      console.log(res)
    })
    .catch(error => {
      console.log(error);
    });
};

export function* watchSendAction() {
  yield takeEvery(SAVE_FORM, sendRequest);
}

function createEventChannel() {
  const listener = eventChannel(emit => {
    database.ref('entries/users').on('value', data => emit(data.val()));
    return () => database.ref('entries/users').off(listener);
  });
  return listener;
}

//This is supposed to update my store with the data received by the database
function* startListener() {
  const updateChannel = createEventChannel();
  while (true) {
    const data = yield takeEvery(updateChannel);
    yield put(UPDATE_STORE(data));
  }
}


export default function* helloSaga() {
  yield fork(watchSendAction);
  yield fork(startListener);
}

我似乎无法弄清楚我在做什么错。

马丁·卡德莱克

我怀疑问题出在您的startListener传奇故事中。您应该使用带take效果的while循环,或者takeEvery使用while循环。现在,您正在将两者混合在一起。

尝试这个:

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));
  });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重构React代码,以使用Firebase RT数据库和Redux Hooks中的Redux状态

来自分类Dev

Firebase实时数据库不会更新值

来自分类Dev

创建/更新/删除 Firebase 实时数据库规则

来自分类Dev

如何使用Redux状态的数据?

来自分类Dev

数据库的Redux状态持久性

来自分类Dev

从Redux表单访问Redux Store

来自分类Dev

使用 Redux 更新组件状态以查看 Flatlist 中的数据

来自分类Dev

如何等到数据被获取并使用redux更新状态

来自分类Dev

如何更新Firebase实时数据库中的位置?

来自分类Dev

Ionic + Firebase - 实时数据库不更新视图

来自分类Dev

已解决:React Redux的useSelector不会在expo react-native上更新存储状态

来自分类Dev

Redux状态未更新

来自分类Dev

更新嵌套的redux状态

来自分类Dev

在实时数据库上更新之前删除索引

来自分类Dev

使用输入更新Redux状态

来自分类Dev

如何使用Redux更新状态?

来自分类Dev

使用Redux花费时间在秒表上并将其放入数据库中

来自分类Dev

Redux状态已更新,但UI未更新

来自分类Dev

如何在离线模式下更新 firebase 实时数据库“推送”上的 UI

来自分类Dev

Firebase实时数据库addValueEventListener

来自分类Dev

Firebase实时数据库-规则

来自分类Dev

Firebase实时数据库addValueEventListener

来自分类Dev

Android:Firebase实时数据库

来自分类Dev

Firebase 实时数据库的问题

来自分类Dev

Firebase 实时数据库帖子

来自分类Dev

使用Firebase实时数据库填充tableview

来自分类Dev

从 Node 使用 Firebase 实时数据库

来自分类Dev

redux 如何使用状态

来自分类Dev

Xamrin.Forms尝试使用Firebase实时数据库创建电子邮件检查