Редуктор не обновляется - PullRequest
       17

Редуктор не обновляется

0 голосов
/ 15 ноября 2018

Я пытаюсь обновить свойство объекта, который вложен в массив моего состояния редуктора.Редуктор получает хорошую полезную нагрузку, но мой взгляд не обновляется.

Вот фрагмент того, что я пытаюсь сделать:

//reducers.js

case UPDATE_ROOM_TMP: {
  const roomIndex = state.config.rooms.findIndex(room => room.id === action.payload.id);
  return { 
    ...state, 
    rooms: state.config.rooms.map(
      (room, i) => i === roomIndex ? { ...room, tmp : action.payload.tmp} : room
    )
  }
}

Вот структура редукторасостояние:

config: {
  ...
  rooms: [
    {
      ...,
      tmp: 22
    }
  ]
}

Действие для обновления редуктора:

export const updateRoomTmp = ({ targetTmp, roomId }) => {
  return {
    type: UPDATE_ROOM_TMP,
    payload: { targetTmp, roomId },
  };
};

Функция, которая вызывает действие:

  increaseTmp = () => {
    const tmp = this.props.config.rooms[this.roomIndex].targetTmp + 1
    this.props.updateRoomTmp({targetTmp: tmp, roomId: this.props.room.id});
  }

Текст, который представляет новое значение

  <Text>{this.props.config.rooms[this.roomIndex].targetTmp}</Text>

Как я подключаюсь к конфигу:

const mapStateToProp = ({ allConfig }, props) => {
  const { config } = allConfig;
  return { config };
 };

Так что проблема в том, что при вызове увеличенияTmp редуктор получает хорошую полезную нагрузку, но никогда не обновляется, поэтому текст необновляться либо.

1 Ответ

0 голосов
/ 15 ноября 2018

Попробуйте изменить reducers.js как,

case UPDATE_ROOM_TMP: {
const roomIndex = state.config.rooms.findIndex(room => room.id ===action.payload.id);
    return { 
            ...state, 
            config:{
            ...config,
            rooms: state.config.rooms.map( (room, i) => i === roomIndex ? { ...room, tmp : action.payload.tmp} : room)
            }
    }
}
...