State Hook 解决什么问题
state hook
可以用来给 函数组件
添加 state
。
没有 state hook
之前, 函数组件
属于 无状态组件
,想给 函数组件
添加 state 时,只能将其转换为 class 组件。
State Hook 的使用方法
定义
1 | import React, { useState } from 'react'; |
在函数组件中,通过调用 useState()
函数来定义 state 变量,它与 class 里面的 this.state 提供的功能相同。
useState 的返回值:返回一个有两个值的数组。第一个值是 state 变量,第二个值是更新 state 变量的函数。上面示例中,count 就是刚刚定义的 state 变量,setCount 就是用来更新 count 的函数。
useState 的参数:用来初始化 state 变量。下面示例中的参数 0,即表示 count 的初始值。
1 | /* |
读取State
在 class 组件中,读取 state 变量时,通过 this.state,如 this.state.count。
1 | <p>You clicked {this.state.count} times</p> |
在函数组件中,读取 state 变量时,直接使用即可,如 count。
1 | <p>You clicked {count} times</p> |
更新State
在 class 组件中,需要调用 this.setState()
来更新 state 变量:
1 | //setState 更新 State 时,会使用新值和旧值进行合并 |
在函数组件中,使用 useState()
函数返回的 更新函数
(如 setCount 函数)来更新对应的 state 变量:
1 | //useState 更新 State 时,会直接用新值替换旧值 |
示例
1 | 1: import React, { useState } from 'react'; |
定义多个 state 变量方法:
多次调用 useState
1
2
3
4
5function ExampleWithManyStates() {
// 声明多个 state 变量
const [age, setAge] = useState(42);
const [fruit, setFruit] = useState('banana');
const [todos, setTodos] = useState([{ text: '学习 Hook' }]);将多个变量通过对象或数组的方式存入同一个 state 变量
1 | function Box() { |