обновить значение элемента массива объектов в хранилище приставок - PullRequest
0 голосов
/ 04 октября 2019

Существует сложность обновить значение существующих элементов в массиве json в хранилище резервов создателем действий. Вы можете выполнить код здесь , также поделитесь им ниже;

console.clear()
const CreateTeam = (team, point) => {
  return {
    type:"CREATE_TEAM",
    payload: {team, point}
  }
}

const UpdateTeam = (team, point) => {
  return {
    type:"UPDATE_TEAM_POINT",
    payload: {team, point}
  }
}

const TeamReducer = (state = [], action) => {
  if(action.type == "CREATE_TEAM")
     {
      return [...state, action.payload]
     }
    if(action.type == "UPDATE_TEAM_POINT")
     {
       let point=action.payload.point;

      return [...state, {
        ...state.teams,
        point:point
      }]
     }
  return state;
}

const { createStore, combineReducers } = Redux;

const league = combineReducers({
  teams: TeamReducer
})

const store = createStore(league);

store.dispatch(CreateTeam("TeamA",10));
store.dispatch(CreateTeam("TeamB",20));

store.dispatch(UpdateTeam("TeamA",15));//not work
console.log(store.getState())

Создание действий работает нормально, я ожидал, что значение TeamA установлено в 15 ..., но добавленный новый объект имеет только "точка "значение свойства 15

1 Ответ

1 голос
/ 04 октября 2019

Произошла ошибка в названии actionTypes:

  1. отправка действий type:"UPDATE_TEAM"
  2. ручки-редукторы action.type == "UPDATE_TEAM_POINT"

Вы должны выполнитьнеизменное изменение, попробуйте это:

const TeamReducer = (state = [], action) => {
  if(action.type == "CREATE_TEAM")
     {
      return [...state, action.payload]
     }
    if(action.type == "UPDATE_TEAM")
     {
       const {team, point} = action.payload;
       const changedIdx = state.findIndex((item) => item.team === team);
       return [...state.slice(0, changedIdx), action.payload, ...state.slice(changedIdx + 1)]

     }
  return state;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...