2015-12-16 2 views
0

Я на самом деле не уверен, является ли это ожидаемое поведение, и я просто не хватает что-то :)Provider компонент не пересборку

Контейнер файла:

https://gist.github.com/anonymous/2b93241de5573bd0a6bd

Этот компонент игры используется в качестве следует:

https://gist.github.com/anonymous/80f0c2747c25a541e68d После того, как было отправлено действие pickColor, обновление магазина (я проверил, подписавшись на него с другого места). Итак, после отправки этого действия - игровой компонент не перерисовывается.

И, как я уже сказал, я не уверен, правильно ли я настроил редукс или он был спроектирован таким образом, поэтому мне нужно повторно выполнить компонент вручную, подписавшись на сохранение?

+1

Если ваш магазин обновляется, но ваш компонент не то это, вероятно, что вы * Mutating * Ваше состояние. Как выглядит ваш редуктор? –

+0

Это была проблема. Глупый я. Спасибо – matiit

+0

Подробный ответ добавлен ради полноты. –

ответ

1

Связи привязки будут обновлять ваши компоненты только тогда, когда объект состояния является экземпляром нового объекта.

Таким образом, ваши редукторы должны возвращать новые объекты. Вот в чем заключается неизменность.

BAD:

switch (action.type) { 
    case SET_VALUE: 
     state.value = action.value; 
     return state; 
} 

ХОРОШО:

switch (action.type) { 
    case SET_VALUE: 
     return Object.assign({}, state, { 
      value: action.value 
     }); 
} 
+0

О, мужик, я искал около 2 часов, почему не было загружено состояние моего компонента, проверяя, как реагировать на инструменты и видят новые элементы, проверяя мою функцию редуктора только для того, чтобы понять, что я вернул точное то же состояние, но только изменение одного ключа в этом состоянии. Object.assign() для победы! Спасибо, мистер Уолш ... также, я люблю ваш блог и статью о том, как чувствовать себя мошенничеством. приветствия из Сиэтла! :) –

+0

Это действительно отличный блог, просто я не могу за него похвастаться. (Другой человек, одно и то же имя.) Но в противном случае, рад помочь. –