【发布时间】:2017-12-10 18:53:06
【问题描述】:
我很困惑,因为我这里不返回状态,只返回action.payload(代码sn-p):
case HISTORY_SELECTED:
return action.payload;
所有reducer代码:
import { HISTORY_SELECTED } from '../actions/index';
export default function (state = null, action) {
switch (action.type) {
case HISTORY_SELECTED:
return action.payload;
default:
return state;
}
}
编辑:增加了 3 个案例。
如果我以正确的方式理解答案,CASE 2、CASE 3 和 CASE 4 也可以,是吗?
案例 2 (reducer_note_selected.js)
import { NOTE_SELECTED, DEL_NOTE_SUCCESS } from '../actions/actions';
export default function (state = null, action) {
switch (action.type) {
case NOTE_SELECTED:
return action.payload;
case DEL_NOTE_SUCCESS:
return null;
default:
return state;
}
}
案例 3(reducer_notes_status_fetch.js - 这里我只返回字符串)
import {
FETCH_ALL_NOTES_STARTED,
FETCH_ALL_NOTES_ERROR,
FETCH_ALL_NOTES_SUCCESS
} from '../actions/actions';
export default function (state = {}, action) {
switch (action.type) {
case FETCH_ALL_NOTES_STARTED:
return 'fetching_started';
case FETCH_ALL_NOTES_ERROR:
return 'error';
case FETCH_ALL_NOTES_SUCCESS:
return 'fetch_all_notes_success';
default:
return state;
}
}
案例 4 (reducer_notes_general.js)
import _ from 'lodash';
import { FETCH_ALL_NOTES_SUCCESS, DEL_NOTE_SUCCESS } from '../actions/actions';
export default function (state = {}, action) {
switch (action.type) {
case FETCH_ALL_NOTES_SUCCESS:
return _.mapKeys(action.payload.data, '_id');
case DEL_NOTE_SUCCESS:
return _.omit(state, action.payload);
default:
return state;
}
}
【问题讨论】:
-
是的,但是“下一个状态”可以只是来自操作的数据。
-
我可以像以前那样做吗?还是违反规则?我很困惑我到底能在减速器中返回什么。
-
是的,你可以,根据我的回答。 reducer 返回的“新状态”可能基于旧状态、基于操作的数据,甚至是您从头开始计算的数据。
标签: javascript reactjs redux react-redux