React太灵活了特别是配上了es6以后,它就像泥沙里的泥鳅,越想抓住越是抓不住;除此以外我在使用react的时候时不时的会有些纠结react
//1. one function + switch pattern class OneFunSwitch extends Component { handleChange = (e)=>{ let {type} = e.target.dataset; /** switch--case--default **/ } render(){ return( <div> <button onClick={this.handleChange} data-type="name">修更名称</button> <button onClick={this.handleChange} data-type="age">修改年龄</button> <button onClick={this.handleChange} data-type="submit">提交</button> {/** ...more evenet **/} </div> ) } } // 2. multiple functon pattern class MultipleFun extends Component { handleNameChange = ()=>{} handleAgeChange = ()=>{} handleSubmit = ()=>{} render(){ return( <div> <button onClick={this.handleNameChange} >修更名称</button> <button onClick={this.handleAgeChange} >修改年龄</button> <button onClick={this.handleSubmit} >提交</button> {/** ...more evenet **/} </div> ) } }
上面2钟方式,你在开发中常常使用哪种?仍是说看心情来,<_>es6
// 1. 使用 es6 arrow function class ArrowFun extends React.Component { click(){ /** click... **/ } render(){ return( <div> <button onClick={()=>this.click()}>click</button> <button onClick={this.click.bind(this,{})}>click</button> </div> ) } } // 以上2种方法等效,看上去这种写法仍是很不错的,可是由于函数没法像数据那样走diff算法,因此组件会作浪费的渲染 // 2. 经过构造函数进行this绑定 class ArrowFun extends React.Component { constructor(props){ super(props); this.click = this.click.bind(this); } click(){ /** click... **/ } render(){ return( <div> <button onClick={this.click}>click</button> </div> ) } } // 相对第一种,是解决了多余render问题,可是好像没啥好的办法进行参数的传递,同时还多了一行代码。 // 3. 使用class-properties class ArrowFun extends React.Component { constructor(props){ super(props); } click =()=>{ } render(){ return( <div> <button onClick={this.click}>click</button> </div> ) } } // 相对前2种,貌似这种最好了;可是须要注意的是1. 类属性还不是es规范,2.一样面临参数传递的问题
好吧,该用哪种呢?任意用吗?算法
~~~未完待续函数