Javascript ReactJs-减速器中的循环和返回状态

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

我有一个id数组

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很抱歉这么晚才回复,但实际上我已经尝试了很多东西,并继续前进,可能会在一段时间内回到它,然后我会发布它。谢谢你的帮助。