React: 函数式组件
1. 简介
函数式组件本质上就是一个JS函数
作为一个组件,至少包括一些结构代码
2. 示例代码
展开代码
3. 运行原理
- ReactDOM.render解析组件标签
- 解析到组件为函数式组件,调用该函数,将返回的虚拟DOM转为真实DOM呈现在页面
- 普通JS函数中的this指向的是window对象,babel将JSX代码翻译为JS代码时,开启的严格模式(use strict),此时函数中的this的值为undefined
4. hooks扩展
1. State Hook
可以让函数组件有state状态,并对状态进行读取和更新
语法: const [count,setCount] = React.useState
- number: 指定状态的数据类型
- 0: 状态的初始值
- count: 状态名称,可以通过该字段引用状态的属性值
- setCount: 用于更新状态的函数,有两种写法:
- 传入一个状态值,覆盖原来的状态值
- 传入一个函数,函数的入参为原来的状态值,函数必须有返回值,返回值作为新的状态值
- 调用setCount函数更新时会触发组件的重新render,内部会缓存每个状态对应的值,保证状态值不丢失
2. Effect Hook
在函数的指定操作之前执行指定函数,类似于类式组件的生命周期函数
语法:
useEffect(() => {
// 在此可以执行任何带副作用操作
doSomething()
return () => { // 在组件卸载前执行
// 在此做一些收尾工作, 比如清除定时器/取消订阅等
}
}, [stateValue]) // 如果指定的是[], 回调函数只会在第一次render()后执行
- 第一个参数为一个函数,在组件挂载后会执行该函数的内部逻辑,相当于 componentDidMount
- 若第一个函数返回了一个新的函数,在组件卸载前会执行这个返回的函数,相当于 componentWillUnmount
- 第二个参数为一个数组,组件会监听数组中的对象,这些对象发生变化时会重新渲染组件,相当于 componentDidUpdate
- 若不传数组参数,则默认监听所有的useState,任意一个发生变化则重新渲染组件
- 若传一个[]空数组,则表示不进行监听,回调函数只在第一次render后执行一次
- 若在数组内传入其他对象,则该对象发生变化时重新渲染组件
3. Ref Hook
在函数组件中存储任意标签对象,功能和类式组件中的React.createRef()一样
语法:
const myRef = React.useRef() <input type="text" ref={myRef}/>
通过myRef可以获取input标签
如果文章对您有所帮助,可以点一下推荐