У меня есть три компонента, которые все подключаются к хранилищу избыточности и отображают одно и то же состояние, назовем его 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"
});
}
};
}
Добавлен редукционный код @codekaizer
render from Component B следует вызывать только один раз. это правильно. Когда состояние редукции изменится, component A получит уведомление и вызовет свой метод render. Следующим шагом является обновление его дочерних элементов. Затем Component B вызывает свой render метод. Поток состояния будет примерно таким: state change -> Component A re-render -> Component B re-render. Это то, что вы испытали?
просто для ясности, все компоненты используют connect(mapStateToProps, mapDispatchToProps)(Component)? означает, что все компоненты слушают count?
@codekaizer Да
Правильный. Но помните, что A является родителем, поэтому он получает уведомление первым.
@BrunoPaulino Однако ComponentB подключен к избыточному хранилищу с помощью connect функции react-redux, поэтому, когда хранилище изменилось, компонент также должен обновиться? Это второе обновление
@ hh54188 это правильно. Но помните, что в данном случае B является потомком A, поэтому A также играет роль в жизненном цикле B. Если бы они отображались в другой иерархии, скажем, в узлах одного уровня в дереве DOM, они все равно вызывали бы render только один раз. из-за того, как React обрабатывает согласование.
@БруноПаулино Спасибо.





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