- Objective:
- Breadcrumb:
# 概念阐释
## 语义
`useState`允许向组件添加状态变量,当我们调用`useState()`时,它会返回[[JavaScript 数组]],包含 2 个数组值,当前的状态和设置的状态。状态钩子允许我们在 React 函数组件中,以 state 的形式管理动态数据(例如,表单数据)/
## 语法
```jsx
import React, { useState } from 'react'; //导入状态变量
const [currentState, setCurrentState] = useState(initialState);//返回数组,const 与[]之间必须空格
```
- `currentState` 原始状态
- `setCurrentState`更新后的状态
# 实例
```jsx
import React, {useState} from 'react';
const colorNames = ['Aquamarine', 'BlueViolet', 'Chartreuse', 'CornflowerBlue', 'Thistle', 'SpringGreen', 'SaddleBrown', 'PapayaWhip', 'MistyRose'];
export default function ColorPicker() {
// call useState and assign its return values to `color` and `setColor`
const [color,setColor] = useState();
const divStyle = {backgroundColor: color};// 根据 `color` 状态的当前值动态设置背景颜色,初始值是默认的白色
return (
<div style={divStyle}>
<p>The color is {color}</p>
{colorNames.map((colorName)=>(
<button onClick={()=>setColor(colorName)} key={colorName}> //setCurrentState()中添加的是固定的数组值
- {colorName}
</button>
)}
</div>
);
}
```
- `button`组件返回一个包含多个按钮的 `div` 元素。每个按钮在被点击时会使用`.map()`方法和 `setColor()` 来更新状态,创建每一个`colorName`的数组值 ,从而改变 `div` 的背景颜色。
- [[JSX .map]]的箭头后面使用`{}`还是`()`取决于代码的复杂度,如果直接返回 html 标签使用`()`,如果还有其他的逻辑,则使用`return {}`
# 相关内容
## 状态初始值
- 为状态设定一个初始值,如果没有就设`(null)`,如果不定义会返回`undefined`,用户会困惑。
```jsx
const [color, setColor] = useState('Tomato');
```
# 参考资料
- [Update Function Component State - codecademy](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-react-part-ii/modules/wdcp-22-function-components-and-hooks-a2dba9bf-fc64-4118-8656-dfdc35f9e5cc/lessons/the-state-hook/exercises/update-function-component-state)
- [useState-React](https://react.dev/reference/react/useState)
- [Review 实例-Codecademy](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-react-part-ii/modules/wdcp-22-function-components-and-hooks-a2dba9bf-fc64-4118-8656-dfdc35f9e5cc/lessons/the-state-hook/exercises/review)