`

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';

 

 


更多实例应用扫码体验:

分享到:
评论

相关推荐

    react-events:React组件的声明性托管事件绑定

    React事件 ...所有事件都在一个地方声明,以便于阅读 提供listenTo API 具有许多开箱即用的支持类型的可插拔事件定义(参考、道具、窗口、重复) 这个项目包括/依赖于 您可能感兴趣的其他 React 项目

    React组件侦听keydown和keyup键盘事件,定义和调度键盘快捷键。-React开发

    react-hotkeys React组件可侦听keydown和keyup键盘事件,定义和调度键盘快捷键。 使用hotkeys.js的fork进行特殊字符的keydown检测。 您为它提供了shortcu react-hotkeys React组件的键盘映射,以侦听keydown和keyup...

    深入理解React中es6创建组件this的方法

    Facebook也推荐组件创建使用通过定义一个继承自 React.Component 的class来定义一个组件类。官方的demo: class LikeButton extends React.Component { constructor() { super(); this.state = { like

    babel-plugin-react-scope-binding::meat_on_bone:React组件的Babel插件采用事件处理程序来自动绑定上下文

    babel插件React范围绑定React组件的Babel插件采用事件处理程序来自动绑定上下文。安装$ npm install babel-plugin-react-scope-binding --save-dev动机在构建React组件时,必须注意事件处理程序。 在组件中,默认...

    React组件中的this的具体使用

    通过编写一个简单组件,并渲染出来,分别打印出自定义函数和render中的this: import React from 'react'; const STR = '被调用,this指向:'; class App extends React.Component{ constructor(){ super() } /...

    react-shortcuts:从一处管理键盘快捷键

    React快捷方式 ... 使用react-shortcuts您可以声明性地管理每个React组件的快捷键。 React快捷键的重要部分: 您的keymap定义 ShortcutManager ,用于处理keymap 组件,用于处理快捷方式 尝试在线演示 快速导

    React Redux:ReactRedux的绑定-开源

    它使您的React组件能够从Redux存储中读取数据,并向存储分派操作以更新数据。 React Redux由Redux团队维护,并与Redux和React的最新API保持同步。 设计用于与React的组件模型一起使用。 您定义如何从Redux中提取...

    前端开源库-react-autobind

    前端开源库-react-autobindreact autobind,自动将组件类中定义的方法绑定到当前对象的词法

    indexeddb-hooked:用于React的IndexedDB适配器

    一个用于React的小型React式IndexedDB绑定。 npm i indexeddb-hooked初始化数据库您将React应用程序与IndexedDBProvider组件连接起来,并在config对象中定义您的模式。 import React from 'react' ;import { ...

    react-native-gl-image-filters:使用gl-react的React-Native图像滤镜

    在描述性VDOM范例中,React Native的OpenGL绑定可在图像和组件上实现复杂的效果。 您可以使用预定义的过滤器: 模糊 对比 饱和 亮度 色调 消极的 棕褐色 锐化 温度 接触。 gl-react-native是对react-native的gl-...

    react-js-cron:使用antd构建的React cron编辑器

    ReactJS Cron 使用构建的React cron编辑器 在实时演示和用法特征零依赖,除了React和antd 支持所有标准cron表达式支持几个月和一周的cron名称支持cron快捷方式周日支持“ 7” 支持带输入的双向同步绑定支持语言环境...

    component-editor:视觉组件编辑器(最初用于React组件)

    最初用于具有React-Bootstrap组件预设的React组件 运行你的项目 只需实时重新加载: $ npm start 在开发模式下(带有源映射) $ npm run dev 建造: $ npm run build 去做 重构框架(ReFlux?) 在导出的jsx中...

    react-hooks-testing-library::ram:简单而完整的React hooks测试实用程序,鼓励良好的测试实践

    何时使用此库您正在使用一个或多个不直接绑定到组件的自定义钩子编写库您有一个复杂的钩子,很难通过组件交互进行测试什么时候不使用这个库您的挂钩是在组件旁边定义的,仅在此处使用您的挂钩很容易测试,只需使用它...

    使用 gl-react 的 React-Native 图像过滤器

    react-native-gl-image-filters 用于 React Native 的 OpenGL 绑定,以在描述性 VDOM 范式中实现对图像和组件的复杂效果。 您可以使用预定义的过滤器:模糊对比度饱和亮度色调负棕褐色锐化温度曝光。 gl-react-...

    ui5-webcomponents-sample-react:使用React构建的UI5 Web组件样本TODO应用程序

    它展示了如何使用嵌套组件和自举的React构建来绑定属性,订阅事件。 该项目是通过引导的。 先决条件 ( 8.5或更高版本 :warning: ) (可选用法) 入门 使用,然后导航到下载的目录。 git clone ...

    rmwc-typed:React Material Web组件的打字稿定义

    React Material Web组件这些是一些非正式的Typescript绑定。 这是基于版本0.0.1-rc11的一项正在进行的工作。 在package.json中的devDependencies下添加以下内容: "@types/rmwc": "ncknt/rmwc-typed

    awesome-react-platforms:您知道您可以使用react构建其他东西吗?

    -使用react组件定义可下载的excel工作簿 -用于Arduino和其他物理设备的React绑定 -用于构建交互式数据可视化的可组合React组件的集合 -用React做节奏! 用于使用React&React Native制作游戏的组件库 易于与React中...

    100-Days-of-React:我在重新学习React

    ## 100天的React #React 100天的第1天 ReactJS是用于构建可重用的UI组件JavaScript库。 根据React官方文档,以下是定义- ... 您需要将所有内容都视为一个组成部分。 这将在大型项目中帮助您维护代码。

    ES6下React组件的写法示例代码

    主要给大家介绍了在ES6下React组件的写法,其中包括定义React组件、声明prop类型与默认prop、设置初始state、自动绑定,文中分别给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们...

    jb-react:视觉开发与React

    使用 React 进行可视化开发可视化开发在 Web 开发领域被打破,主要是因为无法再使用预定义的可视化组件。 业界事实上接受这样一个事实,即复杂的 Web 应用程序无法通过视觉方式进行开发。 jBart 提出了一种革命性的...

Global site tag (gtag.js) - Google Analytics