Вы должны хранить элементы состояния с идентификатором, таким образом, вы можете управлять им так, как вам нравится.Пример
// Let's imagine that this is your initial state. State here is an object of an x
// object that contains n-object that represents your button.
//
const state = {
myButtons: [
{
id: "unique_id",
.
.
},
{...}
],
selectedBtn: -1,
}
В этом сценарии вы можете легко получить нужную кнопку для передачи идентификатора через действие, и таким образом редуктор будет выглядеть примерно так:
export const Reducer_posts = (state=[], action) => {
switch (action.type){
case 'FETCH_POSTS':
const newState = Object.assign({}, state);
newState.myButtons.concat(action.payload)
return Object.assign({}, newState)
default:
return state;
}
};
export const Reducer_select = (state=[], action) => {
switch (action.type){
case 'SELECT_POST': // I think this is fired on click on a button
const newState = Object.assign({}, state);
newState.selectedBtn = action.payload.btnId;
return Object.assign({}, newState);
case 'DELETE_SELECT': // when you have to delete a button
const newState = Object.assign({}, state);
newState.myButtons =
newState.myButtons.filter((el) => el.id !== action.payload.id)
return Object.assign({}, newState);
default:
return state;
}
};
Теперь то же самое, если вынеобходимо изменить текст с такой структурой, вы можете легко получить доступ к этому массиву с помощью фильтра и получить нужную кнопку.В вашем фрагменте кода, когда ваш код поступил в редуктор, он просто возвратил action.payload, и это на самом деле неправильно, потому что один из принципов избыточности говорит, что состояние должно быть неизменным.Я выучил редекс из здесь , и я знаю, что это может быть очень сложно в начале