React是一个JavaScript库;需要熟悉箭头函数模板字符串let, 和 const 声明。

资源:博客链接 菜鸟教程

JSX(JavaScript XML) 简介:

JSX 用来声明 React 当中的元素,它是一种 JavaScript 的语法扩展。
作用: 用来创建react虚拟DOM(元素)对象

元素是构成 React 应用的最小单位。

基本语法规则

    • 遇到 <开头的代码, 以标签的语法解析: html同名标签转换为html同名元素, 其它标签需要特别解析
    • 遇到以 { 开头的代码,以JS的语法解析: 标签中的js代码必须用{}包含

babel.js的作用

  • 浏览器的js引擎是不能直接解析JSX语法代码的, 需要babel转译为纯JS的代码才能运行
  • 只要用了JSX,都要加上type=”text/babel”, 声明需要babel来处理

两个创建虚拟dom对象的方式

  • var element = React.createElement('h1', {id:'myTitle'}, 'hello');
  • let element = <h2>hello react</h2>

渲染虚拟dom

1). 语法: ReactDOM.render(virtualDOM, containerDOM) :
2). 作用: 将虚拟DOM元素渲染到真实容器DOM中显示
3). 参数说明
参数一: 纯js或jsx创建的虚拟dom对象
参数二: 用来包含虚拟DOM元素的真实dom元素对象(一般是一个div)

什么是组件?

定义:需要交互的设计成组件
1). 定义组件

  1. //方式1: 工厂(无状态)函数(定义简单的组件推荐使用)
  2. function MyComponent1() {
  3. return <h1>自定义组件标题11111</h1>
  4. }
  1. //方式2: ES6类语法(定义复杂的组件推荐使用)
  2. class MyComponent3 extends React.Component {
  3. render () {
  4. return <h1>自定义组件标题33333</h1>
  5. }
  6. }

2). 渲染组件标签

  1. ReactDOM.render(<MyComponent/>, document.getElementById('example'));

创建虚拟dom与组件注意点

  1. * 渲染规则为将容器中的所有元素清除再渲染
  2. * 创建的虚拟dom标签必须有结束标签
  3. * 创建的组件虚拟dom标签必须开头字母大写
  4. * 如果有多个虚拟dom标签的话,必须用一个容器将他们包起来
  5. * style=‘’的时候,用两个大括号 style = {{}}

组件的三大属性:props/state/refs

1、state

  1. 1). 组件被称为"状态机", 通过更新组件的状态值来更新对应的页面显示(重新渲染)
  2. 2). 初始化状态:
  3. constructor (props) {
  4. super(props);
  5. this.state = {
  6. stateProp1 : value1,
  7. stateProp2 : value2
  8. };
  9. }
  10. 3). 读取某个状态值
  11. this.state.statePropertyName
  12. 4). 更新状态---->组件界面更新
  13. this.setState({
  14. stateProp1 : value1,
  15. stateProp2 : value2
  16. })

2、props

  1. 1. 每个组件对象都会有props(properties的简写)属性
  2. 2. 组件标签的所有属性都保存在props
  3. 3. 内部读取某个属性值: this.props.propertyName
  4. 4. 作用: 通过标签属性从组件外向组件内传递数据(只读)
  5. 5. 使用PropTypesprops进行类型检查
  6. Person.propTypes = {
  7. name: PropTypes.string.isRequired,
  8. age: PropTypes.number.isRequired
  9. }
  10. 6. 扩展属性: 将对象的所有属性通过props传递
  11. <Person {...person}/>
  12. 7. 默认属性值
  13. Person.defaultProps = {
  14. name: 'Mary'
  15. };
  16. 8. 组件类的构造函数
  17. constructor (props) {
  18. super(props);
  19. console.log(props); // 查看所有属性
  20. }

props和states区别

  1. props从组件外向组件内传递数据,组件内部的数据只读不可修改
  2. states组件数据内部的传递,只有组件内部的数据使用,其他的地方不使用

3、refs

1). 组件内的标签都可以定义ref属性来标识自己
2). 在组件中可以通过this.refs.refName来得到对应的真实DOM对象
3). 作用: 用于操作指定的ref属性的dom元素对象(表单标签居多)

this.refs.username //返回input对象
2. 事件处理
1). 通过onXxx属性指定组件的事件处理函数(注意大小写)
React使用的是自定义(合成)事件, 而不是使用的DOM事件
React中的事件是通过委托方式处理的(委托给组件最外层的元素)
2). 通过event.target得到发生事件的DOM元素对象

handleFocus(event) {
event.target //返回input对象
}
3. 强烈注意
1). 组件内置的方法中的this为组件对象
2). 在组件中自定义的方法中的this为null
强制绑定this
箭头函数(ES6模块化编码时才能使用)
4. 问题: 如何给一个函数强制指定内部的this?
call/apply 其中call绑定的是立即执行函数

功能界面的组件化编码流程(无比重要)

  1. 1)拆分组件: 拆分界面,抽取组件
  2. 2)实现静态组件: 使用组件实现静态页面效果
  3. 3)实现动态组件
  4. a.动态显示初始化数据
  5. b.交互功能(从绑定事件监听开始)

组件生命周期

1、理解:

  1. 1)组件对象从创建到死亡它会经历特定的生命周期阶段
  2. 2)React组件对象包含一系列的勾子函数(生命周期回调函数), 在生命周期特定时刻回调
  3. 3)我们在定义组件时, 可以重写特定的生命周期回调函数, 做特定的工作

2、生命周期详述

  1. 1)组件的三个生命周期状态:
  2. * Mount:插入真实 DOM
  3. * Update:被重新渲染
  4. * Unmount:被移出真实 DOM
  5. 2)React 为每个状态都提供了勾子(hook)函数
  6. * componentWillMount()
  7. * componentDidMount()
  8. * componentWillUpdate()
  9. * componentDidUpdate()
  10. * componentWillUnmount()
  11. 3)生命周期流程:
  12. a.第一次初始化渲染显示: ReactDOM.render()
  13. * constructor(): 创建对象初始化state
  14. * componentWillMount() : 将要插入回调
  15. * render() : 用于插入虚拟DOM回调
  16. * componentDidMount() : 已经插入回调
  17. b.每次更新state: this.setSate()
  18. * componentWillUpdate() : 将要更新回调
  19. * render() : 更新(重新渲染)
  20. * componentDidUpdate() : 已经更新回调
  21. c.移除组件: ReactDOM.unmountComponentAtNode(containerDom)
  22. * componentWillUnmount() : 组件将要被移除回调

3、重要的勾子

  1. 1)render(): 初始化渲染或更新渲染调用
  2. 2)componentDidMount(): 开启监听, 发送ajax请求
  3. 3)componentWillUnmount(): 做一些收尾工作, 如: 清理定时器
  4. 4)componentWillReceiveProps(): 后面需要时讲
  5. componentWillReceiveProps :当props更新的时候会被调用这个方法。
  6. componentWillReceiveProps方法里使用this.setState(),能够在调用render()之前更新状态,来对prop转换做出反应。 旧的props可以通过this.props访问。 在这个函数中调用this.setState()不会触发额外的渲染。
  7. 新的属性的设置 this.setState 获取旧的属性 this.props