前言
本文不做概念性的解析,旨在实操 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' |