Javascript ReactJs-减速器中的循环和返回状态
我有一个id数组Javascript ReactJs-减速器中的循环和返回状态,javascript,arrays,reactjs,redux,immutable.js,Javascript,Arrays,Reactjs,Redux,Immutable.js,我有一个id数组 const arr = ["0", "1"]; 在我的减速机的开关情况下,代码如下 arr.map((k) => { const itemIndex = state.getIn(['tableData', 'dataForTable']).findIndex((item) => item.get('id') === k); if (action.actionType === 'deleteMultipleRows') { c
const arr = ["0", "1"];
在我的减速机的开关情况下,代码如下
arr.map((k) => {
const itemIndex = state.getIn(['tableData', 'dataForTable']).findIndex((item) => item.get('id') === k);
if (action.actionType === 'deleteMultipleRows') {
console.log(itemIndex);
return state
.deleteIn(['tableData', 'dataForTable', itemIndex]);
}
if (action.actionType === 'toggleFlagForMultipleRows') {
return state
.setIn(['tableData', 'dataForTable', itemIndex, 'flagStatus'], action.payload.status);
}
});
这个州看起来像这样
{
route: {
location: {
pathname: '/data/3',
search: '',
hash: '',
key: 'imniz2'
}
},
language: {
locale: 'en'
},
appPage: {},
dataFilePage: {
loading: false,
tableData: {
dataFileName: {
id: '1',
start_date_time: '1502843882',
end_date_time: '1502930282',
name: 'Time Tag CSV 12.02.2017',
component: 'zPV',
tags: '#abc111 #abc113 #hpv'
},
headers: [
'id',
'DateTime',
'ARF_CHWR_Temp',
'ARF_CHWS_Temp',
'ARF_SCHWP_Magflo',
'flagStatus'
],
data: [ ],
dataForTable: [
{
id: '0',
DateTime: '1534398905',
ARF_CHWR_Temp: 19.07981,
ARF_CHWS_Temp: 5.8339,
ARF_SCHWP_Magflo: 5.150002,
flagStatus: false
},
{
id: '1',
DateTime: '1534398965',
ARF_CHWR_Temp: 19.43713,
ARF_CHWS_Temp: 5.795691,
ARF_SCHWP_Magflo: 5.699998,
flagStatus: false
},
{
id: '2',
DateTime: '1534398905',
ARF_CHWR_Temp: 19.17568,
ARF_CHWS_Temp: 5.805243,
ARF_SCHWP_Magflo: 5.774999,
flagStatus: false
},
]
}
}
}
我的问题是,商店里没有发生变化,我不知道为什么。我认为这与.map
中的return
语句有关。我已经正确地检查了代码,在任何其他地方都没有真正的错误。控制台甚至在事件发生后显示在dispatched中
该特定容器的减速器为:-
/*
*
* DataFilePage reducer
*
*/
import { fromJS } from 'immutable';
import { LOAD_DATA_FILE, LOAD_DATA_FILE_SUCCESS, ACTION_DISPATCHED_IN_DATA_TABLE, ACTION_DISPATCHED_IN_DATA_TABLE_SUCCESS } from './constants';
export const initialState = fromJS({
loading: false,
tableData: {},
});
function dataFilePageReducer(state = initialState, action) {
switch (action.type) {
case LOAD_DATA_FILE:
return state.set('loading', true);
case LOAD_DATA_FILE_SUCCESS:
return state
.set('tableData', fromJS(action.payload))
.set('loading', false);
case ACTION_DISPATCHED_IN_DATA_TABLE:{
if (action.payload.id !== undefined && action.payload.id !== null) { // for single row operations
const itemIndex = state.getIn(['tableData', 'dataForTable']).findIndex((item) => item.get('id') === action.payload.id);
// console.log('reducer item index', itemIndex);
if (itemIndex !== undefined && itemIndex !== null) {
if (action.actionType === 'toggleFlag') {
return state
.setIn(['tableData', 'dataForTable', itemIndex, 'flagStatus'], action.payload.status);
}
if (action.actionType === 'editTableData') {
return state
.updateIn(['tableData', 'dataForTable', itemIndex], item => fromJS(action.payload));
}
if (action.actionType === 'deleteRow') {
return state
.deleteIn(['tableData', 'dataForTable', itemIndex]);
}
}
}
if (action.payload.selectedRowKeys.length > 0) { // for multiple row operations
action.payload.selectedRowKeys.map((k) => {
const itemIndex = state.getIn(['tableData', 'dataForTable']).findIndex((item) => item.get('id') === k);
if (action.actionType === 'deleteMultipleRows') {
return state
.deleteIn(['tableData', 'dataForTable', itemIndex]);
}
if (action.actionType === 'toggleFlagForMultipleRows') {
return state
.setIn(['tableData', 'dataForTable', itemIndex, 'flagStatus'], action.payload.status);
}
});
}
return state;
}
default:
return state;
}
}
export default dataFilePageReducer;
对于arr中的每个元素,您的映射将返回一个新值。在地图中,您返回的是状态的新版本,但实际上并没有从减速器返回任何内容。再看一看你是如何得到一个新版本的state然后返回的。谢谢你指出这一点。“我现在正在研究这个问题。”@chrisCousins我尝试了一些方法,但都没有成功:(关于我应该如何进行这项工作,有什么想法或方向吗?请发表你的看法tried@ChrisCousins很抱歉这么晚才回复,但实际上我已经尝试了很多东西,并继续前进,可能会在一段时间内回到它,然后我会发布它。谢谢你的帮助。