如何在传奇函数中访问动作值

时间:2019-10-31 14:36:50

标签: javascript react-native redux redux-saga

我想从我的传奇故事中的home.js访问一个值,但我得到的Typerror未定义不是评估有效负载的对象。

我想将val从SET_RSSI动作类型携带到PERSIST_RSSI_SUCCESS。

是否可以在redux-saga中访问它?

action.js:

export const $setRssi = val => {
  return (dispatch, getState) => {
    const URL = getState().connect.URL;
    dispatch({type: Types.SET_RSSI, val, URL});
  };
};

saga.js:

    function* persistRssi({payload}) {
          let {val, URL} = payload;
          try {
            yield axios
              .post('http://' + URL + ':8080/rest/items/rssi', val, config)
              .then(response => {
                console.log('STATUS RESPONSE FROM PERSIST RSSI' + response.status);
              });
            yield put({type: Types.SET_BATT_SUCCESS, val});
          } catch (error) {
            yield put({type: Types.SET_BATT_FAILURE});
          }
        }
    function* actionWatcher() {
      yield takeLatest(Types.SET_RSSI, persistRssi);
    }
export default function* rootSaga() {
  yield all([actionWatcher()]);
}

reducer.js:

import * as Types from '../../actions/Types';
import defaultState from './state';
module.exports = (state = defaultState, action) => {
  switch (action.type) {
    case Types.SCANNING:
      return {
        ...state,
        scanning: !action.val,
      };
    case Types.SET_RSSI_SUCCESS:
      return {
        ...state,
        rssi: action.val,
      };
    case Types.SET_RSSI_FAILURE:
      return state;  
    default:
      return state;
  }
};

我不确定这里的逻辑,是否用传奇逻辑确认?

1 个答案:

答案 0 :(得分:1)

在传奇中作为参数获取的对象是动作对象本身。您正在分派此操作对象。

{type: Types.SET_RSSI, val, URL}

那里没有payload属性。所以改变这个

function* persistRssi({payload}) {

收件人:

function* persistRssi(payload) {

甚至最好将payload重命名为action,因为payload会使使用https://github.com/redux-utilities/flux-standard-action动作对象模式的人们感到困惑。