四、【react】useState

useState是一个react hook函数,它允许我们向组件添加一个状态变量,从而控制影响组件的渲染结果

const [count,setCount] = useState(0)
  1. useState是一个函数,返回值是一个数组
  2. 数组的第一个参数是状态变量,第二个参数是set函数用来修改状态变量
  3. useState的参数将作为初始值
import { useState } from "react";
function App() {
  // 1、调用useState添加一个状态变量count,初始值为0,setCount是更新状态变量的函数
  const [count,setCount] = useState(0);
  // 2、定义一个函数handleClick,点击按钮时,将count加1
  const handleClick = () => {
    setCount(count + 1);
  }
  return (
    <div className="App">
      <button onClick={handleClick}>{count}</button>
    </div>
  );
}
export default App;

对象和数组

import { useState } from "react";
function App() {
  // 1、调用useState添加一个状态变量count,初始值为0,setCount是更新状态变量的函数
  const [count,setCount] = useState(0);
  // 2、定义一个函数handleClick,点击按钮时,将count加1
  const handleClick = () => {
    // 3、调用setCount更新状态变量,这个地方不能直接写count=count+1,因为只有调用setCount才能触发重新渲染
    setCount(count+1);
  }

  // 对象的替换
  const [form,setForm] = useState({name:'jack',age:'10'});
  const handleFormClick = () => {
    setForm({...form,name:'lily',age:'12'});
    console.log('form:',form)
  }
  
  // 数组
  const [list,setList] = useState([1,2,3]);
  const handleListClick = () => {
    const len = list.length + 1
    setList([...list,len]);
  }

  return (
    <div className="App">
      <button onClick={handleClick}>{count}</button>
      <button onClick={handleFormClick}>{'my name is '}{form.name}</button>
      <button onClick={handleListClick}>{'check me list add one'}</button>
      <ul>
        {list.map(item => <li key={item}>{item}</li>)}
      </ul>
    </div>
  );
}
export default App;
import { useState } from "react"

function MyApp() {
  const [count,setCount] = useState(0)
  const [person,setPerson] = useState({name: "John", age: 30}
  const [arr,setArr] = useState([1,2,3])


  const clickHandler = () =>{
    setCount(count+1)
  }
  const changePersonHandler = () => {
    setPerson({name: person.name+"1", age: person.age+1})
  }
  const popArr = () => {
    setArr([...arr,6])
  }

  return (
    <div>
      <button onClick={clickHandler}>{count}</button>
      <div>{person.name}, {person.age}</div>
      <button onClick={changePersonHandler}>change person</button>
      <ul>
        {arr.map((item,index)=><li key={index}>{item}</li>)}
      </ul>
      <button onClick={popArr}>pop</button>
    </div>
  )
}
export default MyApp
### 基本用法 `useState` 是 React 提供的一个 Hook,用于在函数组件中管理状态。其基本语法如下: ```javascript import React, { useState } from 'react'; function MyComponent() { const [state, setState] = useState(initialValue); // ... 使用 state 和 setState } ``` 其中,`useState` 接收一个初始状态值作为参数,并返回一个数组。数组的第一个元素是当前的状态值,第二个元素是一个用于更新该状态的函数[^1]。 例如,初始化一个布尔值的状态: ```javascript const [on, setOn] = useState(false); ``` 在组件中,可以使用 `on` 来读取当前状态,并通过 `setOn` 来更新状态值[^3]。 ### 状态更新机制 `useState` 提供的更新函数有两种使用方式: 1. **直接传入新的状态值**:适用于状态值不依赖于当前状态的情况。 ```javascript setCount(count + 1); ``` 2. **传入一个函数**:该函数接收当前状态值作为参数,并返回新的状态值。这种方式在处理异步更新时更为可靠。 ```javascript setCount((prevCount) => prevCount + 1); ``` 在异步场景中,如 `setTimeout` 或 `Promise`,推荐使用函数式更新,以确保获取到最新的状态值[^5]。 ### 状态管理建议 在使用 `useState` 时,建议遵循以下最佳实践: - **保持状态的单一职责**:每个 `useState` 应尽量只管理一个逻辑相关的状态,以提高代码的可维护性和可读性[^2]。 - **初始化值的多样性**:`useState` 的初始值可以是一个基本类型(如数字、字符串、布尔值),也可以是一个对象或数组。如果初始值较为复杂,可以通过函数返回初始值,以避免不必要的计算。 ```javascript const [num, setNum] = useState(() => { // 复杂的初始化逻辑 return 0; }); ``` ### 示例 以下是一个简单的示例,展示了如何使用 `useState` 来管理按钮点击次数的状态: ```javascript import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); function handleClick() { setCount(count + 1); } return ( <div> <p>Count: {count}</p> <button onClick={handleClick}>Increment</button> </div> ); } ``` 在这个示例中,`count` 是当前的状态值,`setCount` 是用于更新状态的函数。每次点击按钮,`count` 的值会增加 1,并触发组件的重新渲染。 ### 进阶用法 对于更复杂的状态管理,可以结合 `useReducer` 或其他状态管理库(如 Redux)来处理。然而,对于大多数简单的状态管理需求,`useState` 已经足够强大且易于使用[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值