Мое приложение имеет состояние, которое может иметь или не иметь объект user
.Redux: Ребенок получает реквизит перед родителем
У меня есть два контейнера и два компонента:
ParentContainer:
const mapStateToProps = (state) => ({
showUserDetails: Boolean(state.user),
})
export default connect(mapStateToProps)(ParentComponent)
ParentComponent:
const ParentComponent = ({ showUserDetails }) => (
<div>
{showUserDetails && <ChildContainer />}
</div>
)
ChildContainer:
const mapStateToProps = (state) => ({
name: state.user.name,
})
export default connect(mapStateToProps)(ChildComponent)
ChildComponent:
const ChildComponent = ({ name }) => (
<h1>{name}></h1>
)
Однако я бегу в сценариях, где, после того, как действие, которое устанавливает state.user = null
, ChildContainer
пытается оказать, прежде чем ParentContainer
и, следовательно, бросает исключение, поскольку он не может получить доступ к null.name
.
Является ли это ожидаемым поведением Redux, что дочерний контейнер может повторно отобразить перед родителем? В классическом потоке React эта ошибка не произойдет.
Я ценю в этом надуманном примере, можно просто позвонить <ChildComponent name={user.name} />
в ParentComponent
вместо использования контейнера. Но в реальном мире у меня есть глубоко вложенные компоненты, обращающиеся к множеству разных частей государства, поэтому они не могут просто легко передавать реквизиты.
Это работало , благодаря. Любые хорошие места, чтобы узнать, что такое пакетные обновления, и почему он решил эту проблему? –
@BenSmith Короче говоря, идея в пакетной обработке заключается в том, что несколько вызовов setState в течение одного и того же js-тика будут производить только один рендер в React. Почему это вызывает проблемы с проверкой оригинальной проблемы Github https://github.com/reactjs/react-redux/issues/86 То же самое происходит там, где вы здесь. – Epeli