ฉันใช้คลาส es6 และฉันลงเอยด้วยวัตถุที่ซับซ้อนหลายอย่างบนสถานะสูงสุดของฉันและพยายามทำให้ส่วนประกอบหลักของฉันเป็นแบบแยกส่วนมากขึ้นดังนั้นฉันจึงสร้างตัวหุ้มคลาสที่เรียบง่ายเพื่อรักษาสถานะขององค์ประกอบด้านบน แต่อนุญาตตรรกะท้องถิ่นเพิ่มเติม .
คลาส wrapper ใช้ฟังก์ชันเป็นตัวสร้างที่ตั้งค่าคุณสมบัติในสถานะองค์ประกอบหลัก
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()
}
}
จากนั้นสำหรับแต่ละคุณสมบัติที่ซับซ้อนในสถานะด้านบนฉันสร้างหนึ่งคลาส StateWrapped คุณสามารถตั้งค่าอุปกรณ์ประกอบฉากเริ่มต้นในตัวสร้างที่นี่และพวกเขาจะถูกตั้งค่าเมื่อชั้นเรียนเริ่มต้นคุณสามารถอ้างถึงรัฐในท้องถิ่นสำหรับค่าและการตั้งค่าสถานะท้องถิ่นอ้างถึงฟังก์ชั่นท้องถิ่นและผ่านมันโซ่:
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"})
}
ดังนั้นองค์ประกอบระดับบนสุดของฉันต้องการเพียงตัวสร้างเพื่อตั้งค่าแต่ละคลาสให้เป็นคุณสมบัติสถานะระดับบนสุดการเรนเดอร์แบบง่ายและฟังก์ชั่นใด ๆ ที่สื่อสารข้ามองค์ประกอบ
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!"})
}
ดูเหมือนว่าจะทำงานได้ค่อนข้างดีสำหรับจุดประสงค์ของฉันโปรดจำไว้ว่าคุณไม่สามารถเปลี่ยนสถานะของคุณสมบัติที่คุณกำหนดให้กับคอมโพเนนต์ที่ถูกห่อที่ส่วนประกอบระดับบนสุดเนื่องจากส่วนประกอบที่ถูกห่อแต่ละรายการกำลังติดตามสถานะของตัวเอง ทุกครั้งที่มีการเปลี่ยนแปลง