Es6 sınıfları kullanıyorum ve üst durumumda birkaç karmaşık nesne ile sona erdi ve ana bileşenimi daha modüler hale getirmeye çalışıyordum, bu yüzden durumu üst bileşende tutmak için basit bir sınıf sarıcısı oluşturdum, ancak daha yerel mantığa izin verdim .
Wrapper sınıfı, yapıcı olarak bir işlevi, ana bileşen durumunda bir özellik ayarlar.
export default class StateWrapper {
constructor(setState, initialProps = []) {
this.setState = props => {
this.state = {...this.state, ...props}
setState(this.state)
}
this.props = initialProps
}
render() {
return(<div>render() not defined</div>)
}
component = props => {
this.props = {...this.props, ...props}
return this.render()
}
}
Sonra üst durumdaki her karmaşık özellik için, bir StateWrapped sınıfı oluşturun. Burada yapıcıdaki varsayılan sahne özelliklerini ayarlayabilirsiniz ve bunlar sınıf başlatıldığında ayarlanır, değerler için yerel duruma başvurabilir ve yerel durumu ayarlayabilir, yerel işlevlere başvurabilir ve zinciri geçmesini sağlayabilirsiniz:
class WrappedFoo extends StateWrapper {
constructor(...props) {
super(...props)
this.state = {foo: "bar"}
}
render = () => <div onClick={this.props.onClick||this.onClick}>{this.state.foo}</div>
onClick = () => this.setState({foo: "baz"})
}
Bu nedenle, üst düzey bileşenim, her sınıfı üst düzey durum özelliğine, basit bir render'e ve çapraz bileşenle iletişim kuran tüm işlevlere ayarlamak için yapıcıya ihtiyaç duyar.
class TopComponent extends React.Component {
constructor(...props) {
super(...props)
this.foo = new WrappedFoo(
props => this.setState({
fooProps: props
})
)
this.foo2 = new WrappedFoo(
props => this.setState({
foo2Props: props
})
)
this.state = {
fooProps: this.foo.state,
foo2Props: this.foo.state,
}
}
render() {
return(
<div>
<this.foo.component onClick={this.onClickFoo} />
<this.foo2.component />
</div>
)
}
onClickFoo = () => this.foo2.setState({foo: "foo changed foo2!"})
}
Benim amacım için oldukça iyi çalışıyor gibi görünüyor, her bir sarılmış bileşen kendi durumunu izliyor, ancak üst bileşendeki durumu güncellediğinden, üst düzey bileşende sarılmış bileşenlere atadığınız özelliklerin durumunu değiştiremeyeceğinizi unutmayın. her değiştiğinde.