创建项目执行的命令
- npm install -g create-react-app
- create-react-app [项目名称]
- cd进项目文件
- 再执行npm start就可以启动react项目
jsx语法
- jsx语法就是js+xml的语法
1 | //render是一个渲染函数 |
- 解读jsx语法:遇到<>按照html语法解析,遇到{}按照js语法解析,例如下面代码和上面的代码有一样的效果
1 | const react = "React" |
React元素渲染
1 | //在这段代码中定义了一个tick函数,然后使用setInterval设置每隔1秒调用tick函数 |
React的组件
- 创建一个jsx文件,使用ES6的语法来创建一个类,使用类的形式来表示一个组件
1 | import React from "react" |
- 再index.js中引入组件
1 | import React from 'react'; |
- React项目都是由很多个组件组成的,所以组件在React中是很重要的。
porps属性
- 当 React 元素为用户自定义组件时,它会将 JSX 所接收的属性(attributes)以及子组件(children)转换为单个对象传递给组件,这个对象被称之为 “props”。
1 | import React from "react" |
1 | import React from "react" |
组件的状态State
- State 与 props 类似,但是 state 是私有的,并且完全受控于当前组件
- 当要设置State时,应调用setState方法进行设置
- 一般可以使用state来设置自定义组件的属性值,
1 | import React from "react" |
React生命周期函数
- componentWillMount:在组件渲染之前执行
- componentDidMount:在组件渲染之后执行
- shouldComponentUpdate:返回true和false,true代表运行改变,false代表不允许
- componentWillUpdate:数据在改变之前执行()
- componentDidUpdate:数据修改完成执行
- componentWillReveiceProps:Props发生改变执行
- componentWillUnmount:组件卸载前执行
- React中的子传父、父传子
1 | import React from "react" |
1 | import React from "react" |
setState更新是同步还是异步
- 如果执行下面的代码,setState方法是同步的,当setState还没执行完时,console.log方法会被调用,所以会出现数据不一致的现象
1 | import React from "react" |
- 处理这个问题有两种办法,第一种是使用React给定的解决方法
1 | //把increment函数改成下面函数 |
- 第二种是使用ES6的异步关键字(async/await)来解决
1 | async increment(){ |