概念:useState 是一个React Hook(函数),它允许我们向组件添加状态变量,从而影响组件的渲染结果。
本质:和普通JS变量不同的是,状态变量一旦发生变化,组件的视图UI也会跟着变化(数据驱动视图)。react没有双向绑定,所以要使用useState,vue可以直接使用变量 就会双向绑定。
javascript">// 用useState给组件添加状态变量,以实现一个计数器按钮
import { useState } from "react";function App() {//第一步,调用useState添加一个状态变量//count是状态变量,setCount是用来修改状态变量的方法,其参数为状态变量的初值const [count, setCount] = useState(0);//第二步,点击事件调用setCount方法//作用:1、用传入的新值修改count 2、重新用新的count渲染UIconst handleClick = () => {setCount(count + 1);};return (<div className="App"><button onClick={handleClick}>{ count }</button></div>);
}export default App;
修改状态的规则
规则:在React中,状态被认为是只读的,我们应该始终替换它而不是修改它,直接修改状态不能引发视图更新。
修改对象状态
规则:对于对象类型的状态变量,应该始终传给set方法一个全新的对象来进行修改。
javascript">// 用useState给组件添加状态变量,以实现一个计数器按钮
import { useState } from "react";function App() {const [count, setCount] = useState(0);const handleClick = () => {setCount(count + 1);};//修改对象状态const [form, setForm] = useState({name: 'jack'});const changeForm = () => {//setForm()函数会用新对象替换旧对象, 但是这里新对象相对于老对象只是修改了name属性, 其他属性保持不变//...是展开运算符, 用来把form对象的所有键值对展开到新对象中. 然后重新设置了name属性setForm({...form, name: 'rose'});}return (<div className="App"><button onClick={handleClick}>{count}</button><button onClick={changeForm}>修改对象状态 {form.name}</button></div>);
}export default App;