Chcę dodać nowy obiekt do tablicy, która jest w Redux w mojej reagującej aplikacji. Użyłem splątania i nie działa. Jaki jest preferowany sposób wstawienia elementów za pomocą indeksu w Redux?

0
Shashika 5 czerwiec 2018, 09:58

3 odpowiedzi

Najlepsza odpowiedź

Istnieją różne sposoby, w jakie możesz to zrobić /redux/blob/master/docs/recipes/reductors/immutableUpdatePattern.md "Rel =" NOFollow NefErr "> Sprawdź ten link , aby uzyskać więcej informacji na temat aktualizacji sklepu Redux.

Możesz użyć

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

Więc od reduktora, jeśli przypuszczam, że nie jesteś pewien, jak definiuje się reduktor) Możesz zadzwonić

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

Biorąc pod uwagę, że przedmiot musi zostać wstawiony do nieruchomości array.

Jeśli chcesz i tak chcesz użyć spląt, musisz klonować tablicę za pomocą slice, a następnie mutację klonowanej tablicy:

function insertItem(array, action) {
    let newArray = array.slice(); //Returns new array
    newArray.splice(action.index, 0, action.item);
    return newArray;
}
3
pritesh 5 czerwiec 2018, 09:03

Jeśli chcesz dodać nowy obiekt do tablicy w określonym indeksie bez znaczenia tablicy, której możesz użyć Object.assign:

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

Jeśli masz 2 elementy i dodaj obiekt w index 3 instead of 2 mieć undefined w index 2}

1
aravind_reddy 5 czerwiec 2018, 07:36

Splice ma pracować. Czy możesz pokazać nam swój kod?

Czy używasz tego w ten sposób? :

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']
1
GauthierG 5 czerwiec 2018, 08:27