2016-08-25 2 views
4

Я использую normalizr и имею свою ветку state.entities.users.Состояние Redux UI в объектах

В моем SPA есть страницы для просмотра пользователей и последующие/отмена их подписки. Мы показываем spinner, когда вы выбираете пользователя или ожидаете результата последующего вызова API.

Есть ли наилучшая практика, где можно разместить состояние пользовательского интерфейса?

кажется проще просто хранить это в entities объекта:

{ 
    entities: { 
    [1]: { 
     name: "Bob", 
     followed_by_user: true 
    }, 
    [2]: { 
     isFetching: true 
    } 
    [3]: { 
     name: "Jane", 
     isUpdatingFollowing: true 
    } 
    } 
} 

Существуют ли какие-либо крупные недостатки в сохранении этих данных здесь? В противном случае мне понадобится реализовать параллельную форму редуктора, например. state.ui.pages.users с большим количеством перекрытий, с точки зрения которых они реагируют (например, оба редуктора должны будут ответить отдельно на USER_CONSTANTS.USER_FOLLOW_SUCCESS: один для обновления state.ui.pages.users[1].isUpdatingFollowing = false и один для обновления state.entities[1].followed_by_user = true, тогда как в вышеуказанном формате я могу позаботиться обо всем этом за один присест).

+3

Несколько редукторов, которые реагируют индивидуально на, возможно, одно и то же действие, по-видимому, являются красотой использования Redux от разделения перспективы концерна. В противном случае ваш редуктор будет становиться все больше и больше. – goldbullet

ответ

1

При использовании redux вы должны приложить все усилия, чтобы разделить проблемы. В вашем домене users - это концепция, которая, как представляется, не зависит от информации о состоянии ui, поэтому вы можете также разместить их в разных редукторах.

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

Это был хороший ответ от создателя самого редукса на аналогичный вопрос: https://github.com/reactjs/redux/issues/601#issuecomment-133519377.

Смежные вопросы