Вопрос о методе рендеринга компонента redux

У меня есть три компонента, которые все подключаются к хранилищу избыточности и отображают одно и то же состояние, назовем его x

И три связанных компонента имеют отношения родитель-потомок, например:

- connect()(ComponentA)
  - connect()(ComponentB)
  - connect()(ComponentC)

ComponentB и ComponentC являются дочерними элементами ComponentA.

Когда я изменяю значение x в подключенном ComponentC, отображение x также меняется в ComponentA и ComponentB, но сколько раз вызывается метод рендеринга в ComponentB?

Теоретически он должен вызываться дважды (один родительским компонентом A и один сам по себе), на самом деле он вызывается только один раз. Почему?


Редукс-код:

function counter(initalState = { count: 0 }, action) {
  switch (action.type) {
    case "add":
      return Object.assign({}, { count: initalState.count + 1 });
    default:
      return initalState;
  }
}

const store = createStore(
  combineReducers({
    counter
  })
);

function mapStateToProps(state) {
  return {
    count: state.counter.count
  };
}

function mapDispatchToProps(dispatch) {
  return {
    add: function() {
      dispatch({
        type: "add"
      });
    }
  };
}

пожалуйста, покажите, как вы mapStateToProps.

Joseph D. 18.02.2019 14:25

Добавлен редукционный код @codekaizer

hh54188 18.02.2019 14:28
render from Component B следует вызывать только один раз. это правильно. Когда состояние редукции изменится, component A получит уведомление и вызовет свой метод render. Следующим шагом является обновление его дочерних элементов. Затем Component B вызывает свой render метод. Поток состояния будет примерно таким: state change -> Component A re-render -> Component B re-render. Это то, что вы испытали?
Bruno Paulino 18.02.2019 14:37

просто для ясности, все компоненты используют connect(mapStateToProps, mapDispatchToProps)(Component)? означает, что все компоненты слушают count?

Joseph D. 18.02.2019 14:39

@codekaizer Да

hh54188 18.02.2019 14:39

Правильный. Но помните, что A является родителем, поэтому он получает уведомление первым.

Bruno Paulino 18.02.2019 14:40

@BrunoPaulino Однако ComponentB подключен к избыточному хранилищу с помощью connect функции react-redux, поэтому, когда хранилище изменилось, компонент также должен обновиться? Это второе обновление

hh54188 18.02.2019 14:41

@hh54188, проверьте Reconciliation.

Joseph D. 18.02.2019 14:45

@ hh54188 это правильно. Но помните, что в данном случае B является потомком A, поэтому A также играет роль в жизненном цикле B. Если бы они отображались в другой иерархии, скажем, в узлах одного уровня в дереве DOM, они все равно вызывали бы render только один раз. из-за того, как React обрабатывает согласование.

Bruno Paulino 18.02.2019 14:46

@БруноПаулино Спасибо.

hh54188 18.02.2019 14:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
10
28
0

Другие вопросы по теме