使用索引将对象添加到redux中的数组

时间:2018-06-05 06:58:37

标签: react-native

我想在我的react本机应用程序中的redux中添加一个新对象。我使用拼接而且它不起作用。在redux中使用index插入项目的首选方法是什么?

3 个答案:

答案 0 :(得分:3)

你有多种方法可以做到这一点。但是你应该避免使用诸如push,unshift,splice之类的方法,因为这些方法会改变违反反应哲学的状态。你可以check this link获取更多关于如何使用的信息更新redux商店。

您可以使用

function insertItem(array, action) {
    return [
        ...array.slice(0, action.index),
        action.item,
        ...array.slice(action.index)
    ]
}

所以从减速器中假设您(不确定减速器的定义方式)可以调用

return {...state, array: insertItem(state.array, action)}

考虑将项目插入array属性。

如果你想使用splice,那么你需要使用slice克隆数组,然后改变克隆数组,如:

function insertItem(array, action) {
    let newArray = array.slice(); //Returns new array
    newArray.splice(action.index, 0, action.item);
    return newArray;
}

答案 1 :(得分:1)

如果要将新对象添加到特定索引处的数组而不改变数组,可以使用Object.assign

Object.assign([], array, {<position_here>: newItem});

如果你有2个元素并在index 3 instead of 2添加一个对象,你会的 undefined

index 2

答案 2 :(得分:1)

拼接应该起作用。你能告诉我们你的代码吗?

你是这样用的吗? :

var months = ['Jan', 'March', 'April', 'June'];

months.splice(1, 0, 'Feb'); 
// inserts at 1st index position
console.log(months); 
// expected output: Array ['Jan', 'Feb', 'March','April', 'June']

months.splice(4, 1, 'May'); 
// replaces 1 element at 4th index
console.log(months); 
// expected output: Array ['Jan', 'Feb', 'March','April', 'May']