React很难,尤为对于新手。程序员
缘由是设置和逻辑比较随意,并且这么多年出现了不少Pattern,新手通常不会研究什么pattern,能写就行。可是高手通常很注重pattern,好比比HOC还要聪明的,还要高级的,还要很差理解的是有高手发明的: Render Callbackredux
一:提炼下Render Callback的模式patternbash
Step1:构造Stateless无状态Functional COMP(由于他不用关心State,纯粹表现presentational component)。less
Let PureComponent=(props)=>{
return (
<StateComponent ownProps="" passProps={props}>
{ //parse
(passState)=>{
return (//render things...
{passState.loading && <h2>Laoding..</h2>}
.......
)
}
}
</StateComponent>
)
}
复制代码
即:能够简写shorthand(注意())函数
Let PureComponent=(props)=> (
<StateComponent ownProps="" passProps={props}>
{ //parse
(passedState,passedMethod)=> (//render things...
<div>
{passedState.loading && <h2>Laoding..</h2>}
<button onClick={passedMethod.toggle}/>
.......
</div>
)
}
</StateComponent>
)
复制代码
Step2:构造Statefull Component, 即Class Component(由于必需State)。ui
Class StateComponet extends Component{
state:{
show:false,
};
toggle=()=>{
this.setState(
prevState=>({
show:!prevState.show
})
)
};
render(){
return(
this.props.children(
this.state, {
toggle:this.toggle
....
}
}
)
)
};
复制代码
注意:为确保能更新,这里用了setState updater: (prevState, prevProps) => stateChangethis
另外注意:参数顺序相反componentDidUpdate(prevProps, prevState, snapshot)spa
二:跟Redux模式和逻辑对比下code
Redux的思路是:component
Class ReduxComponet extends Component{
state:{
//State仅仅是本地localstate,
//其余State在Redux
};
toggle=()=>{
this.props.passedActionFromRedux(...);
//操做也在redux
};
render(){
return(
<h2>{this.passedReduxState.show}..</h2>}
<button onClick={this.toggle}/>
)
};
...MapStateToProps..
...MapReduxAction..
复制代码
怎么样,理解了吗?!