Как получить доступ к значению действия внутри саги - PullRequest
0 голосов
/ 31 октября 2019

Я хотел бы получить доступ к значению из home.js внутри моей саги, но я получаю, что Typerror не определен, это не объект, оценивающий payload.val.

Я хочу перенести val из типа действия SET_RSSI в PERSIST_RSSI_SUCCESS.

возможно ли получить к нему доступ в redux-саге?

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 Ответ

1 голос
/ 31 октября 2019

Объект, который вы получаете в качестве параметра в саге, является самим объектом действия. Вы отправляете этот объект действия.

{type: Types.SET_RSSI, val, URL}

Там нет свойства payload. Так что измените это

function* persistRssi({payload}) {

на:

function* persistRssi(payload) {

Или даже лучше переименуйте payload в action, поскольку payload может сбить с толку людей, использующих https://github.com/redux-utilities/flux-standard-actionсхема объекта действия.

...