одно действие обновляет проблему производительности нескольких редукторов - PullRequest
0 голосов
/ 06 ноября 2019

В текущем приложении я настроил несколько редукторных редукторов для хранения данных. Давайте просто назовем их «пользователь-редукторы» и «питомцы-редукторы». 2 очень похожи, у них обоих есть посты []. Теперь, когда пользователю нравится сообщение внутри posts [], запускается действие likeDone. Теперь у меня есть 2 варианта реализации обновления приставки:

Вариант 1: «пользователь-редукторы» и «пэт-редукторы» слушают «LikeDone». IMO, это неэффективно на более поздних этапах, когда у меня есть больше похожих редукторов, и все они перечисляют одно действие.

Вариант 2: измените «likeDone» на 2 более явных действия, например. «likeUserPostDone» «likePetPostDone», и каждый редуктор реагирует на согласованное действие. Таким образом, обновления редуктора кажутся более эффективными, но позже будет больше типов действий, которые приведут к большому количеству «переключений», и я не уверен, что это хорошая практика.

Спасибо зачитайте и скажите, пожалуйста, что лучше для моего дела.

1 Ответ

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

Пусть оба редуктора выслушают ваши действия, если они оба изменятся, когда произойдет это действие. Все редукторные редукторы эффективно прослушивают все отправленные действия. Они игнорируют действия, если это не меняет состояние.

const petPostReducer = (prev = defaultValue, action = {}) => {
  const { type, payload} = action;
  switch (type) {
    case "LIKE_DONE": {
      const {id} = payload || {};
      const oldItem = prev[id] || {}
      const newItem = {...oldItem, like: true}
      return {
        ...prev
        [id]: {...updateItem, [id]: newItem};
    }
    default: {
      return prev; // Ignore all other actions != LIKE_DONE
    }
  }
};

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

По возможности избегайте логики в ваших редукторах.

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

console.log(state.posts) =>
{
   0: {type: 'user' like: false},
   1: {type: 'pet' like: false},
   2: {type: 'user' like: true},
}

Пожалуйста, избегайте преждевременной оптимизации . Я часто делаю вещи, которые менее эффективны, в пользу простого, лаконичного, неизменяемого, читабельного и полезного кода. Если вы нацеливаетесь на функциональный телефон или обнаруживаете узкое место в реальной производительности, вам необходимо провести измерения с помощью инструментов мониторинга производительности. Оптимизация движка JavaScript постоянно улучшается, и результаты часто бывают удивительными.

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