Concat实际上是连接而不是添加到数组中。反应本机Javascript

Concat实际上是连接而不是添加到数组中。反应本机Javascript,javascript,react-native,redux,react-native-listview,Javascript,React Native,Redux,React Native Listview,我对react Native和Javascript编程基本上是新手,我试图用react Native和redux创建一个简单的“待办”应用程序 我试图在我的reducer中的数组中添加一个“to Do”,如下所示 import * as types from '../actions/actionTypes' const initialState = { data: [] }; export default function toDo(state = initialState, act

我对react Native和Javascript编程基本上是新手,我试图用react Native和redux创建一个简单的“待办”应用程序

我试图在我的reducer中的数组中添加一个“to Do”,如下所示

import * as types from '../actions/actionTypes'

const initialState = {
    data: []
};

export default function toDo(state = initialState, action) {

    let list
    console.log(action + " action")
    switch (action.type) {
        case types.ADD:
        list = state.data.concat([action.toDoData])
            return {
                ...state,
                data: list || []
            }
        default:
             return state;
    }
}
结果表明 您可以看到“第一件事”和“第二件事”是我添加的两个结果,它们合并到同一行

我的第一个想法是,我的愚蠢的或呈现式的ListView出现了一些问题,它采用了如下数据

<MyList data={this.props.data}/>

下面是一些关于如何将数据“推送”到阵列中的见解

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");

//fruits = ["Banana", "Orange", "Apple", "Mango", "Kiwi"];
或者你可以

export default function toDo(state = initialState, action) {
  switch (action.type) {
    case types.ADD:
      return {
        data: [...state.data, action.toDoData]
      }
    default:
      return state;
  }
}

您需要数组扩展运算符,即

export default function toDo(state = initialState, action) {
  switch (action.type) {
    case types.ADD:
      return {
        data: [...state.data, action.toDoData]
      }
    default:
      return state;
  }
}

您的action.toDoData是数组吗?如果是,那么应该是

state.data.concat(action.toDoData)


我想不知怎么的,在你的第一个循环中,你在state.data中添加了字符串。。。 试着这样做:
list=state.data.concat(action.toDoData)

或使用ES6排列:

list=[…state.data,action.toDodata]

仅供参考,您应该始终使用分号。可能会有一些非常难看的bug。您的代码看起来不错,只需修复console.log并添加更多的bug即可发现问题。它们应该是这样的:
console.log('action',action)(逗号而不是加号)与您的答案不太相关,但我会在您的减缩器中使用Immutable。当然你不必这么做,但是我遇到了一些关于没有它的对象引用的讨厌的bug。不可变类型的方法也将极大地帮助您操纵数据结构!我认为目标是不可变的Javascript,但不是吗?您仍然可以使用spread操作符并同时推送数组:)不是,它只是字符串输入。四、用行动编辑问题。
export default function toDo(state = initialState, action) {
  switch (action.type) {
    case types.ADD:
      return {
        data: [...state.data, action.toDoData]
      }
    default:
      return state;
  }
}
export default function toDo(state = initialState, action) {
  switch (action.type) {
    case types.ADD:
      return {
        data: [...state.data, action.toDoData]
      }
    default:
      return state;
  }
}