咱们常常须要把一些常见的组件属性封装到一个对象里,而后在渲染属性中使用。bash
function Usage({
onToggle = (aregs) => console.log('Ontoggle',...aregs)
}){
return (<Toggle onToggle={onToggle} >
{(on,toggle)=>(
<div>
{ on ? 'button is on' : 'button is off'}
<Switch on={on} onClick={toggle} />
<button onClick={toggle}>{on? 'on': 'off'}</button>
</div>
)
}
</Toggle>)
}
复制代码
从上面的例子中,咱们能够看到onClick属性,在switch组件以及button组件都传入了一个事件属性并绑定了同一个函数。这部分能够优化为下面的方式。函数
// 吧须要的点击属性封装到一个对象里
getStateAndHelpers() {
return {
on: this.state.on,
toggle: this.toggle,
togglerProps: {
onClick: this.toggle,
'aria-pressed': this.state.on,
} }
}
render(){
return this.props.children(this.getStateAndHelpers())
}
function Usage({
onToggle = (aregs) => console.log('Ontoggle',...aregs)
}){
return (<Toggle onToggle={onToggle} >
{(on,toggle)=>(
<div>
{ on ? 'button is on' : 'button is off'}
<Switch on={on} {...togglerProps} />
<button {...togglerProps}>{on? 'on': 'off'}</button>
</div>
)
}
</Toggle>)
}
复制代码
本文涉及到的技巧很是简单,主要是将render props中的部分公用属性封装为一个对象,而后进行简化操做。优化