我想从我的传奇故事中的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;
}
};
我不确定这里的逻辑,是否用传奇逻辑确认?
答案 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动作对象模式的人们感到困惑。