Meine App hat einen Zustand, der ein user
Objekt haben kann oder auch nicht.Redux: Kind erhält Requisiten vor dem Elternteil
Ich habe zwei Behältern und zwei Komponenten:
ParentContainer:
const mapStateToProps = (state) => ({
showUserDetails: Boolean(state.user),
})
export default connect(mapStateToProps)(ParentComponent)
Parent:
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>
)
Jedoch habe ich in Szenarien leite, wo nach einer Aktion, die state.user = null
setzt, ChildContainer
vor ParentContainer
zu machen versucht und somit löst eine Ausnahme, da es nicht null.name
zugreifen können.
Ist dieses erwartete Verhalten von Redux, das ein untergeordneter Container vor dem übergeordneten Element erneut rendern kann? Im klassischen React-Ablauf würde dieser Fehler nicht auftreten.
Ich schätze in diesem erfundenen Beispiel könnte man einfach <ChildComponent name={user.name} />
in der ParentComponent
anstelle eines Containers anrufen. Aber in der realen Welt habe ich tief verschachtelte Komponenten, die auf viele verschiedene Teile des Staates zugreifen, also kann ich nicht einfach einfach Props runterlassen.
Das funktionierte , Vielen Dank. Irgendwelche guten Plätze, um zu lernen, welche Stapelupdates und warum es dieses Problem löste? –
@BenSmith Kurz gesagt, die Idee beim Batching ist, dass mehrere setState-Aufrufe während des gleichen js-Ticks nur einen Render in React erzeugen. Für warum es Probleme verursacht checkout das Original Github Problem https://github.com/reactjs/react-redux/issues/86 Genau das gleiche passiert dort, wie Sie hier haben. – Epeli