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!"})
}
랩핑 된 각 구성 요소가 자체 상태를 추적하지만 최상위 구성 요소의 상태를 업데이트하므로 최상위 구성 요소에서 래핑 된 구성 요소에 할당 한 속성의 상태를 변경할 수는 없지만 변경 될 때마다