React一个完整组件的定义以及绑定事件的优化
2016-08-29 10:59
447 查看
// 文件命名:switchBtn.jsx (以项目命名规则为准) // 导入所需字段 import React, { Component, PropTypes } from 'react'; // 声明组件名称以及继承关系 class SwitchBtn extends Component { // 构建函数,继承父类 constructor(props) { super(props); // 定义state属性 /* 请慎用setState,因其容易导致重新渲染 既然将数据主要交给了Redux来管理,那就尽量使用Redux管理你的数据和状态state, 除了少数情况外,别忘了shouldComponentUpdate也需要比较state。 */ this.state = { isChecked: props.isChecked }; // 请将方法的bind一律置于constructor /* Component的render里不动态bind方法,方法都在constructor里bind好,如果要动态传参,方法可使用闭包返回一个最终可执行函数。如:showDelBtn(item) { return (e) => {}; }。如果每次都在render里面的jsx去bind这个方法,每次都要绑定会消耗性能。*/ this.onChange = this.onChange.bind(this); } // 内部所需事件 onChange() { console.log(this); this.setState({ isChecked: !this.state.isChecked }); } // 渲染函数 render() { const { isChecked } = this.state; const { id, onClick } = this.props; return ( <div className="switch-btn"> <input id={id} type="checkbox" className="switch-checkbox" checked={isChecked} onChange={this.onChange} /> <label className="switch-label" htmlFor={id} /> </div> ) } } // 定义传参默认值 SwitchBtn.defaultProps = { id: 'switchBtn', isChecked: true }; // 定义传参类型 /* 请只传递component需要的props 传得太多,或者层次传得太深,都会加重shouldComponentUpdate里面的数据比较负担,因此,也请慎用spread attributes()。 */ SwitchBtn.propTypes = { id: PropTypes.string.isRequired, isChecked: PropTypes.bool }; // 导出组件 export default SwitchBtn; // 关于导入组件 import SwitchBtn from '../components/switchBtn.jsx';
阅读更多
相关文章推荐
- create-react-app脚手架创建react项目,react的基本语法,以及react中的事件绑定
- React(0.13) 定义一个动态的组件
- React(0.13) 定义一个多选的组件
- React(0.13) 定义一个动态的组件(函数作为动态的值)
- React(0.13) 定义一个input组件,使其输入的值转为大写
- C#动态组件添加以及预定义事件处理
- js 函数定义的两种方式以及事件绑定(扫盲)
- react---react创建组件的三种方式以及区别:无状态组件、工厂模式、es6语法定义
- 从 0 到 1 实现 react - 9.onChange 事件以及受控组件
- react 实现双向绑定以及事件绑定
- 初学React:定义一个组件
- 采用事件驱动编程以及GUI组件开发一个贷款计算器
- React(0.13) 定义一个checked组件
- 一个完整的String类定义以及测试
- js多个对象绑定一个事件的方法
- Android Shape属性(内含一个Button完整的xml定义)
- react事件绑定--不再需要bind啦(es6)
- vue-router 多个路由地址绑定一个组件造成 created 不执行的解决方法