JSX ?

JSX 是一个FaceBook提供的看起来很像 XML 的 JavaScript 语法糖,让我们更便捷高效的操作js

babel ?

一个javascript代码转换器,主要用于:

  • jsx转换为原生js
  • es6转换为es5(兼容不同浏览器)

webpack ?

当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。

JSX+ES6语法构建React组件

React支持ES5和ES6语法,但推荐使用ES6语法来编写react组件,以下用源码对比ES5和ES6语法下React组件的构建差异:

ES6:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';//ES6语法 构建Component
class App extends Component {constructor(props){ //初始化statesuper(props); //不可变属性this.state = {height: '',opacity: '1.0',color: 'red',fontSize:'25px'};//可变属性//将绑定方法写到constructor中// this.handleClick = this.handleClick.bind(this);}componentWillMount(){//渲染前调用console.log('Lifecycle:'+'componentWillMount');}componentDidMount() { //已被渲染console.log('Lifecycle:'+'componentDidMount');var _self = this;//保存thiswindow.setTimeout(function (){//定时执行_self.setState({color:'green',fontSize:'40px'});},3000);}componentWillUnmount() { //组件从 DOM 中移除的时候立刻被调用console.log('Lifecycle:'+'componentWillUnmount');}componentWillReceiveProps() { //在组件接收到一个新的prop时被调用。这个方法在初始化render时不会被调用console.log('Lifecycle:'+'componentWillReceiveProps');}componentWillUpdate() {console.log('LifeCycle:' + 'componentWillUpdate')}//使用ES6 class语法创建组件, class中的方法不会自动将this绑定到实例中。必须使用 .bind(this)或者 箭头函数 =>来进行手动绑定handleClick () {console.log('ES6 ' + this.props.nameProp);}render () {return (<div className="App"><div className="App-header"><img src={logo} className="App-logo" alt="logo" /><h2>Hello {this.props.nameProp} Welcome to React</h2></div><p className="App-intro">To get started, edit <code>src/App.js</code> and save to reload.</p><div style={{color:this.state.color,fontSize:this.state.fontSize}} onClick={this.handleClick.bind(this)}>button</div></div>);}
}//props类型校验
App.propTypes = {nameProp: React.PropTypes.string
};//props默认值
App.defaultProps = {nameProp: 'leo'
};export default App;

ES5:

//ES5语法 构建Component
var App = React.createClass({getInitialState: function () { //初始化state// alert('init hook');return {opacity: 1.0,fontsize: '12px'};},componentWillMount: function () {//渲染前调用console.log('Lifecycle:'+'componentWillMount');},componentDidMount: function() { //已被渲染console.log('Lifecycle:'+'componentDidMount');},componentWillUnmount: function() { //组件从 DOM 中移除的时候立刻被调用console.log('Lifecycle:'+'componentWillUnmount');},handleClick: function () {console.log('ES5 ' + this.props.nameProp);},propTypes:{nameProp: React.PropTypes.string},getDefaultProps () {return {nameProp: 'leo'};},render: function () {return ( <div className="App"><div className="App-header"><img src={logo} className="App-logo" alt="logo" /><h2>Hello leoo  Welcome to React</h2></div><p className="App-intro">To get started, edit <code>src/App.js</code> and save to reload.</p><div onClick={this.handleClick}>button</div></div>);}
});export default App;

对比小结

  • ES6 class创建的组件语法更加简明,也更符合javascript规范。
  • ES6下,Component 内部的方法不需要使用function关键字。
  • 使用React.Component创建组件,需要通过在constructor中调用super()将props传递给React.Component。且react 0.13之后props是不可变的。
  • 对于ES5下的getDefaultProps方法,由于props不可变,所以ES6下被定义为一个属性,和propTypes一样,要定义在class外部。
  • ES6 class语法创建组件,初始化state的工作要在constructor中完成。不可再调用getInitialState方法。
  • ES6 class语法创建组件, class中的方法不会自动将this绑定到实例中。必须使用 .bind(this)或者 箭头函数 =>来进行手动绑定。

React Component Lifecycle

  • componentWillMount : 在渲染前调用,在客户端也在服务端。
  • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval : 或者发送AJAX请求等操作(防止异部操作阻塞UI)。
  • componentWillReceiveProps : 在组件接收到一个新的prop时被调用。这个方法在初始化render时不会被调用。
  • shouldComponentUpdate : 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。 可以在你确认不需要更新组件时使用。
  • componentWillUpdate : 在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
  • componentDidUpdate : 在组件完成更新后立即调用。在初始化时不会被调用。
  • componentWillUnmount : 在组件从 DOM 中移除的时候立刻被调用。

参考

React官方指导文档

转载于:https://www.cnblogs.com/moyazi/p/6408558.html

技能拓展笔记-React(一)相关推荐

  1. Java架构师必备框架技能核心笔记,附相关架构及资料

    技术焦虑 现在的技术圈子很火热,任何技术点,任何知识,只要你肯搜索,都能找到资料.但是现在技术圈确实有一个不好的地方,就是贩卖焦虑.这种贩卖焦虑的点并不在于形式,而是一种普遍的心态.特别是对于那种知识 ...

  2. Android应用性能优化!Android架构师必备框架技能核心笔记,一文轻松搞定

    前言 19年6月份从网易云音乐离开,放弃了留学机会,开始了人生的第一次创业,前后尝试了两个项目,因为个人能力与时机因素都失败了,虽然没能享受到创业所能够带来高杠杆物质上的回报,但是对个人软技能和自我边 ...

  3. [笔记]React+Cordova踩坑

    之前做过一点前端的小项目所以前端还算熟练 因为最近在准备GRE所以想能不能写一个背单词软件 正好这学期有个Android开发课,就用来当大作业了 前端: webpack+react+redux 后端: ...

  4. 笔记react router 4(三)

    上一篇我们说到了路由组件的嵌套.想必你已经运用自如了.那么,这一次我们来聊一聊4.X中Router的变更. 在3.X中我们若使用路由的模式,可通过在Router上配置history的值即可. 例如, ...

  5. 技能系统设计笔记 3

    记录时间:2009年11月24日 早期的技能系统设计在实现过程中首先发现了子弹模块的设计问题. 从技能系统的实现角度来看,子弹应该只是技能执行的一种扩展,本身不应该单独存在.否则加大了技能系统的制作难 ...

  6. b站React禹哥版视频笔记-React面向组件编程(上)

    目录 前言 一.开发者工具的安装 二.函数式组件 三.复习类相关知识 四.类式组件 五.组件实例的三大核心属性1:state 1.对state的理解 2.初始化state 3.react中的事件绑定 ...

  7. b站React禹哥版视频笔记-React应用(基于react脚手架)

    目录 前言 一.初始化react脚手架 1.react脚手架: 2.创建项目并启动 二.脚手架文件介绍 1.public 2.src 三.一个简单的Hello组件 四.样式的模块化 五.vscode中 ...

  8. 尚硅谷笔记——React组件的三大属性props、state、ref

    state  理解 state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合) 组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新 ...

  9. b站React禹哥版视频笔记-React入门

    目录 前言 一.React简介 1. React是什么 2. 谁开发的 3. 为什么要学 4. React的特点 5. 学习React之前你要掌握的JS基础知识 二.hello_react 案例 三. ...

最新文章

  1. mob sdk vue 短信验证_短信接口那些事儿,你知道多少?
  2. C++set和multiset区别
  3. lib 和 dll 的区别、生成以及使用详解
  4. python 桌面提醒_使用Python获取桌面通知
  5. python列表、字典、元组的用法及区别_python列表,字典,元组简单用法示例
  6. 华为9月将带来鸿蒙系统2.0;张勇任阿里巴巴董事长后发布首封致股东信;iOS 14首个公测版发布​| 极客头条
  7. 手挽手带你学VUE:四档 Vue-cli3 Vuex Vue-router
  8. 2021-2022学期计划
  9. maven阿里仓库配置教程
  10. 服务器dump文件位置,使用windbg分析服务器的DUMP文件
  11. 从JDBC规范谈桥接模式
  12. Mybatis的灵活运用及注意事项
  13. 计算学习理论PAC模型
  14. CSS控制页面展开/关闭
  15. 修改placeholder文字 文字换行省略号 背景图固定 鼠标经过图片闪光效果
  16. Byte和Integer互转
  17. 将tif文件转换成mrc文件
  18. python 创建线程打印_如何使用免费软件创建高质量的照片打印
  19. 从零学习PyTorch(5)----整个天空都是灰蒙蒙的
  20. css 选项进行分组,CSS 通用和分组选择器(十)

热门文章

  1. JavaScript函数调用规则
  2. 强的离谱, Transformer 模型与联邦机器学习详解!
  3. 科技部发文:破除“唯论文”不良导向!网友:靠水论文拿奖励的人不开心了...
  4. Hinton向AAAI提交论文竟收到最差评价!深度学习三教父再押宝,AI或突破常识瓶颈...
  5. 百度-北大在Kaggle发起自动驾驶环境下的汽车6-DOF预测挑战赛
  6. centos打开mysql数据库_Linux、Centos下操作mysql数据库开启远程访问
  7. 最新综述!深度神经网络视觉识别!共计329篇文献!西安交大、清华等合作出品!...
  8. PyTorch 1.8版本!正式支持AMD GPU
  9. YOLOv4改进版重磅问世!Yolov4原班人马重磅推出Scaled-YOLOv4!业界最佳
  10. 计算机关机后耗电问题,不用拔电线 轻松设置解决电脑关机耗电