`

React一个完整组件的定义以及绑定事件的优化

阅读更多

 

// 文件命名: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';

 

 


更多实例应用扫码体验:

分享到:
评论

相关推荐

    03 React 创建组件、绑定属性( 绑定class 绑定style)、引入图片 循环数组渲染数据

    1. **创建组件**:React组件可以通过定义一个JavaScript类或使用函数组件来创建。函数组件更简洁,例如: ```jsx function MyComponent(props) { return &lt;h1&gt;Hello, {props.name}!; } ``` 类组件则需要继承自...

    绘画reactnative表格的一个小组件

    - 要创建一个表格组件,首先你需要定义一个名为`Table`的React组件。这个组件可以接受必要的属性,如数据数组、列宽、行高、表头等。 - 使用JSX语法(JavaScript的XML扩展)来描述组件的UI结构。 3. **样式处理**...

    react-react面试题之事件绑定方式.zip

    在React的类组件中,事件处理函数通常作为类的方法定义,然后在 render 方法中绑定。例如,`onClick={this.handleClick.bind(this)}`。这种方式在组件实例化时会执行一次`bind`,确定`this`指向,避免了箭头函数的...

    react自定义日期组件datePicker

    本案例中,我们关注的是一个使用TypeScript(ts)和React的JSX语法(tsx)实现的自定义日期选择组件——`datePicker`。 `datePicker`组件通常包含以下几个主要部分: 1. **UI结构**:组件的视觉呈现,包括日历图标...

    react-React的电子表格组件

    8. **性能优化**:React组件的一大优势是虚拟DOM,但处理大量数据时仍需注意性能。`sou-react-table`可能实现了只渲染可见行的策略,以减少不必要的渲染。 9. **扩展和插件**:开源库通常提供扩展点和插件系统,让...

    react-reactkeydown轻量级封装按下键盘事件的React组件

    `react-keydown`库提供了一个轻量级的方式来封装和处理React组件中的键盘事件,使得开发者可以更方便地响应用户的键盘输入。 标题中的“react-reactkeydown”指的是这个专门用于React的键盘事件处理库。它简化了在...

    react-reactjsonschemaform一个React组件用于从JSONSchema构建Web表单

    描述中提到的“react-jsonschema-form - 一个React组件用于从JSONSchema构建Web表单”,进一步强调了该组件的主要用途。它不仅提供了一种灵活的方式来构建表单,还内置了丰富的验证机制,确保用户提交的数据符合预设...

    react-reacttappable支持触摸事件的React组件

    `react-tappable`是一个非常有用的库,它为React组件提供了一种简单的方式来处理这些事件,特别是对于移动设备上的触摸事件,使其成为构建响应式、触控友好的应用的理想选择。这个库不仅简化了事件处理,还提供了...

    react-ReactSpreadsheetGrid用于React类似于Excel的网格组件

    在实际项目中,你可以利用React SpreadSheet Grid来实现数据的增删改查、排序、过滤等功能,创建一个功能丰富的在线电子表格应用。例如,用于财务管理、数据分析或者作为企业内部的信息管理系统等。 在下载的压缩包...

    react-ReactVirtuoso是一个简单易用的React组件用于渲染庞大的数据列表

    React Virtuoso是一个高效且灵活的React组件,专门设计用于处理大数据列表的渲染。在现代Web应用中,尤其是在数据驱动的界面中,显示大量条目是常见的需求,例如表格、数据网格或者滚动列表。传统的渲染方式可能会...

    react之旅(二)react项目目录结构,创建组件,绑定数据

    在React应用中,一般会有一个根目录,里面包含`public`和`src`两个主要部分。`public`目录用于存放静态资源,如HTML入口文件、图片等,而`src`目录则是应用的主要源代码所在。 在`src`目录下,常见的结构包括: 1. ...

    react-ReactDatasheet类似Excel的数据网格react组件

    在这个例子中,我们定义了数据数组和事件处理器,然后在App组件中创建了一个ReactDatasheet实例,指定了数据渲染器、编辑器和事件监听器。 总结起来,ReactDatasheet是一个强大的React组件,为开发者提供了构建功能...

    react-ReactdecorationReact组件的一个修饰符集合

    React-decoration 是一个专门为React组件设计的修饰符集合,它提供了多种功能来增强和扩展React组件的行为。这个库的目的是为了简化复杂组件的构建过程,通过装饰器模式来添加额外的功能,比如状态管理、数据处理、...

    react 中父组件与子组件双向绑定问题

    React中父组件与子组件的双向绑定问题,指的是在React组件开发中,数据在父组件与子组件之间相互影响的过程。在React中,通常不推荐使用双向绑定,因为这与React的单向数据流(Unidirectional Data Flow)原则相悖。...

    react-simplereact一个极简的React框架用于说明React实现原理

    4. **生命周期方法**:React组件有多个生命周期方法,如`componentDidMount`、`shouldComponentUpdate`、`componentDidUpdate`等。这些方法在组件的不同阶段被调用,允许我们进行数据获取、性能优化或副作用处理。`...

    react-react面试题之组件之间的通信方式.zip

    创建一个context,然后在祖先组件中定义,所有后代组件都可以通过`React.createContext().Provider`获取到数据。 4. **Redux** 和 **MobX**:当应用变得复杂,状态管理成为挑战时,可以引入Redux或MobX。Redux是一...

    react性能优化.docx

    因此,应该避免使用内联函数定义,而是在组件内部创建一个函数,并将事件绑定到该函数本身。 4. 避免使用内联样式属性 使用内联样式时,浏览器需要花费更多时间来处理脚本和渲染,因为它必须映射传递给实际 CSS ...

    ReactNative按钮组件带有多个动画spinners

    同时,这也为其他开发者提供了一个可复用的组件,他们可以在自己的项目中直接引入,或者根据需求进行定制。总之,理解并掌握React Native的动画系统和组件设计,对于任何想要深入React Native开发的程序员来说都是至...

    gl-react-native,OpenGL绑定,用于React Native,以在描述性VDOM范式中对图像和组件实现复杂效果.zip

    仓库中的示例代码展示了如何创建基本的OpenGL着色器,如何将它们与React组件结合,以及如何处理触摸事件等交互功能。 总的来说,gl-react-native是React Native生态系统中一个重要的扩展,它将强大的OpenGL功能引入...

    Peaceful一个类似于React的有状态组件类

    在Peaceful中,处理用户事件的方法可能与React的事件绑定机制类似,通过在组件模板内指定事件处理器,或者在组件实例中定义方法来响应事件。 7. **状态管理**: 由于Peaceful专注于组件,状态管理可能需要借助...

Global site tag (gtag.js) - Google Analytics