前言
本文不做概念性的解析,旨在实操 hooks
,相关资源可以自行谷歌。以下提供相关参考资料:
- Introducing Hooks
- 理解 React Hooks
- React Hooks 实用指南 - 大都借鉴这篇文章
- Hooks 一览
useState
useState
可以让您的函数组件也具备类组件的state
功能。
1 | /** |
案例
1 | import React, { useState } from 'react' |
值得注意的是,state
是对象的话, setState
接收什么参数,就更新对象下的所有属性,而不是更新单个属性。
1 | import React, { useState } from 'react' |
click button
=> info = { name: 'Sam' }
,age
丢失。
根据业务需求,我们可以在函数组件中使用多个 useState
,这里不再进行演示。
useEffect
Effect Hook
: 它与 React Class
中的 componentDidMount
,componentDidUpdate
和 componentWillUnmount
具有相同的用途。模拟的是生命周期
1 | /** |
案例
1 | class Example extends React.Component { |
等同于
1 | import { useState, useEffect } from 'react' |
- 添加第二个参数进行控制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import React, { useState, useEffect } from 'react'
function Example() {
const [count, setCount] = useState(0)
const [count2, setCount2] = useState(0)
useEffect(() => {
console.log('run useEffect')
}, [count]) // 只有count 变化时才执行这个 useEffect 函数
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>Click me</button>
<p>You clicked {count2} times</p>
<button onClick={() => setCount2(count2 + 1)}>Click me</button>
</div>
)
}
useContext
useReducer
是useState
的代提方案。当你有一些更负责的数据时可以使用它。(组件本地的redux)
使用语法如下:
1 | /** |
案例
1 | import React, { Component, useReducer } from 'react' |
useCallback
useCallback
和useMemo
有些相似。它接收一个内联函数和一个数组,它返回的是一个记忆化版本的函数。
使用语法如下:
1 | const memoizedValue = useMemo(() => computeExpensiveValue(a), [a]) |
案例
1 | import React, { Component, useCallback } from 'react' |
useRef
1 | import React, { useRef } from 'react' |