React基础概述

229 阅读4分钟

image.png

1.React介绍 : React是一个用于构建用户页面的js库,专注于视图,实现组件化开发。主要用来写HTML页面或者构建Web应用,起源于Facebook内部项目,可以进行安卓、ios移动端开发,使用虚拟dom和diffing算法,尽量减少与真实dom的交互提高性能。

2.组件化 : 讲一个复杂的页面分为若干个独立的组件,每个组件都包括自己的逻辑和样式,再将这些组件合成一个完整的页面,这样的方式减少了逻辑复杂又实现了代码的复用。

3.React组件 : 组件可分为两种 :

(1)函数声明组件(适用于简单组件)

函数就是组件,组件名称规定首字母大写,小写的话会被认为是一个标签元素

(2)类声明组件(适用于复杂组件)

类组件再渲染时后默认调用render方法,类组件内有状态和钩子函数

(3)延伸:表单中的受控与非受控组件

受控组件就是需要添加 onChange

优点:可以给输入框赋予默认值 -实时效验

缺点: 每次输入都会调用setState

4.JSX语法规范 :

(1)定义虚拟dom时不要引号

(2)标签中引入js表达式要用{}

(3)如果要写行内样式需要使用style = {{color:red}}形式

(4)样式的类名制定不能写class,要写className

(5)只有一个根标签

(6)标签必须闭合

(7)标签首字母:

【若小写字母开头,将会将该标签转为HTML同名标签,如果没找到就会报错】

【若大写字母开头,将会认为是组件,他就会去找对应的组件,如果没找到就会报组件未定义错误】

5.生命周期 : 挂载、更新、销毁

(1)挂载阶段:挂载阶段组件会完成他的首次渲染,先执行初始化,再被挂载到真是的DOM中,此阶段结束时组件及其资源都会在UI中被渲染。其中依次调用的方法有四个:

1.constructor() 
在生命周期中,类的构造函数constructor()会率先被执行,
用于初始化组件的状态、加收外部传递进来的数据、绑定成员方法的this只等工作(只执行一次)
2.componentWillMount()
会在运行render()之前,他是渲染之前的回调函数。
不过,由于在这个方法中执行的任务都能提前到constructor()中,
因此实际项目中会很少用到它(只执行一次)
3.render()
实在定义组件时必须声明的方法,他是一个无副作用的纯函数,
可根据组价的props和state得到一个React元素、nullfalse等返回值,
并且在render()方法中不能调用改变组件状态的this.setState()方法。
注意,将元素渲染到页面DOM中的工作都有React负责,而不是render()
4.componentDidMount()
会运行在render()之后,他是渲染之后的回调函数。
此时组件以备挂载到页面中,可以执行DOM相关的操作,
例如一步读取服务中的数据并填充到组件中,调用JQuery代码等(只执行一次)

(2)更新阶段:(就是重新渲染)方式有三种:

【第一种:有父组件向下传递props(就是调用父组件的render())引起的更新会依次调用五个方法】

componentWillReceiveProps()
shouldComponentUpdate()
componentWillUpdate()
render()
componentDidUpdate()

【第二种:通过改变自身state(就是调用this.setState()方法)引起更新,会忽略componentWillReceProps()方法,只执行四个回调函数】

【第三种:通过组件forceUpdate()方法强制更新,只有后三个回调函数会执行】

1. componentWillReceiveProps()
常用于执行 props 更新后的逻辑,只有第一种更新方式才会调用它。
该方法能接收一个名为 nextProps 的参数,表示父组件传递进来的新的props。
当需要通过 this.setState() 方法将 nextProps 中的数据同步到内部状态时,
要先比较 nextProps 和this.props 中的值是否相同,再决定是否执行同步。
由于在 componentWillReceiveProps() 中能调用 this.setState() 方法,
因此为了避免进入一个死循环,在调用 this.setState() 方法更新组件时就不会触发它。
2.shouldComponentUpdate()用于决定是否继续组件的更新。
它能接收2个参数:nextProps 和 nextState,分别表示新的 props 和 state。
通过比较 nextProps、nextState 和组件当前的 this.propsthis.state 
能得出一个布尔类型的返回结果。当返回结果为 false 时,组件会停止更新,
后续的 componentWillUpdate()、render() 和 componentDidUpdate() 也不会被执行。
将这个方法使用恰当的话,能减少冗余的渲染,优化组件的性能。
3.componentWillUpdate()
运行在 render() 之前,接收2个参数,提供更新之后的 props 和 state。
4.componentDidUpdate()
运行在 render() 之后,
接收2个参数,提供更新之前的 props 和 state。
注意,在 componentWillUpdate() 中,不能调用 this.setState() 方法,
以免发生不必要的死循环

(3)卸载阶段:当组件在从DOM中被卸载之前,会触发一个无参数的componentWillUnmount()方法。在该方法内适合做清理工作,例如清除定时器,移除多余的DOM元素等

componentWillUnmount()