मैं es6 कक्षाओं का उपयोग कर रहा हूं, और मैं अपने शीर्ष राज्य पर कई जटिल वस्तुओं के साथ समाप्त हुआ और अपने मुख्य घटक को अधिक मॉड्यूलर बनाने की कोशिश कर रहा था, इसलिए मैंने राज्य को शीर्ष घटक पर रखने के लिए एक साधारण वर्ग आवरण बनाया, लेकिन अधिक स्थानीय तर्क के लिए अनुमति देता हूं ।
आवरण वर्ग अपने निर्माता के रूप में एक फ़ंक्शन लेता है जो मुख्य घटक स्थिति पर एक संपत्ति निर्धारित करता है।
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!"})
}
मेरे उद्देश्यों के लिए काफी अच्छी तरह से काम करने लगता है, हालांकि आप उन गुणों की स्थिति को नहीं बदल सकते हैं जो आप शीर्ष स्तर के घटक में लिपटे घटकों को देते हैं क्योंकि प्रत्येक लिपटे घटक अपने स्वयं के राज्य को ट्रैक कर रहे हैं लेकिन शीर्ष घटक पर स्थिति को अपडेट कर रहे हैं हर बार यह बदल जाता है।