Saya menggunakan kelas es6, dan saya berakhir dengan beberapa objek kompleks pada kondisi teratas saya dan berusaha membuat komponen utama saya lebih modular, jadi saya membuat pembungkus kelas sederhana untuk menjaga status pada komponen atas tetapi memungkinkan lebih banyak logika lokal .
Kelas wrapper mengambil fungsi sebagai konstruktornya yang menetapkan properti pada status komponen utama.
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()
}
}
Kemudian untuk setiap properti kompleks di negara bagian atas, saya membuat satu kelas StateWrapped. Anda dapat mengatur alat peraga default di konstruktor di sini dan mereka akan ditetapkan ketika kelas diinisialisasi, Anda dapat merujuk ke negara lokal untuk nilai dan mengatur negara setempat, merujuk ke fungsi lokal, dan telah melewati rantai:
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"})
}
Jadi komponen tingkat atas saya hanya perlu konstruktor untuk mengatur setiap kelas ke properti negara tingkat atas itu, render sederhana, dan fungsi apa pun yang berkomunikasi lintas-komponen.
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!"})
}
Tampaknya berfungsi cukup baik untuk keperluan saya, ingatlah meskipun Anda tidak dapat mengubah keadaan properti yang Anda tetapkan untuk komponen terbungkus pada komponen tingkat atas karena setiap komponen terbungkus melacak keadaannya sendiri tetapi memperbarui keadaan pada komponen atas setiap kali itu berubah.