React useRudecer和useState用法?

本文深入讲解React中的useState和useReducer钩子,通过实例演示如何管理简单的计数状态及复杂的引用类型状态,帮助读者理解不同场景下钩子的应用。

.函数组件没有自身的state 所有通过hook引入外部的组件进来 所有的hook都要用useState来引用.

import { useState } from "react";
import { useReducer } from "react";

1.先了解useState

a. useState的状态就是定义的初始 值 setCount自定义 就是操作状态的方法 useState返回的是一个数组

b.useState 单个数据,不是复杂的数据结构

import Show from "./show";
import IButton from "./iButton";

export default () => {

const [count, setCount] = useState(0);

  const add = () => setCount(count + 1);
  const minus = () => setCount(count - 1);

return (
    <div>
      <Show count={count}></Show>
      <IButton name="+" onClick={add}></IButton>
      <IButton name="-"  onClick={miuns}></IButton>
    </div>
  );
}


//./iButton.js下面的引用组件
export default ({name='按钮',onClick=()=>{}}) => {
    return <div>
        <button onClick={onClick}>{name}</button>
    </div>
}
//./Show.js下面的引用组件

export default ({count}) => {
    return <div>
     <h1>{count}</h1>
    </div>
}

 但如果想要操作引用类型的数据呢?

如果使用uesReduer在某些场景下,uesReduer会比 useState 更适用,例如 state 逻辑较复杂且包含多个子值,或者下一个 state 依赖于之前的 state 等。并且,使用 uesReduer还能给那些会触发深更新的组件做性能优化,因为你可以向子组件传递 dispatch 而不是回调函数 。

   2.useReducer 用来定义复杂的数据里面有一个reducer 是处理器  ,状态,关于状态的操作逻辑,封装

 useReducer有两个参数第一个参数是初始状态值 ,reducer( dispatch) 处理函数

 useReduer的返回值是一个数组[当前的状态值,触发函数]

 dispatch函数是用来触发reducer的

 reducer 他可以接收两个参数 一个是当前的state 第二个参数是action对象 ,action 对象是用来描述当前方生的行为,通用type的属性.来

 const [count, dispatch] = useReducer((state,action) => 
        // console.log('run', state,action);
       switch (action.type) {
        case 'ADD':
             return state + 1
        case 'MIUNS':
              return state - 1
         default:
             return state
      }
          reducers[action.type](state)
    ,0)

const add = () => {
        dispatch(
            {
                type:'ADD'
            }
        )
        
    }
    const miuns = () => {
        dispatch(
            {
                type:'MIUNS'
            }
        )
        
    }

React 框架中,`useState` 是一个用于管理组件状态的基础 Hook,它使得函数组件能够拥有状态管理的能力。`useState` 接收一个初始值作为参数,并返回一个包含当前状态值更新该状态的函数的数组[^1]。 ### 作用 1. **状态管理**:通过 `useState` 可以在函数组件中创建管理状态变量,这些变量可以在组件的生命周期内保持不变,并且当它们发生变化时会触发组件的重新渲染。 2. **简化代码结构**:相比于类组件中的 `this.state` `this.setState()` 方法,`useState` 提供了一种更简洁的方式来定义更新状态[^3]。 3. **提高可维护性复用性**:使用 `useState` 结合其他 Hooks(如 `useEffect`)可以更容易地复用逻辑组织代码,从而提升应用的可维护性[^4]。 ### 使用场景 - **表单输入控制**:对于需要跟踪用户输入的情况非常有用,例如文本框、选择框等表单元素的状态变化。 - **UI 状态切换**:适用于处理 UI 中的各种开关状态,比如模态框显示与否、加载指示器是否激活等。 - **计数器或简单数据模型**:当需要维护一些简单的数值或者对象来反映某些业务逻辑时,`useState` 非常适合这种情形。 - **与自定义 Hooks 配合**:为了实现更加复杂的逻辑复用,可以通过创建自定义 Hooks 来封装特定功能的状态管理副作用处理。 ### 示例代码 下面是一个使用 `useState` 创建计数器的例子: ```javascript import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); // 初始化状态为0 return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> <button onClick={() => setCount(count - 1)}>Decrement</button> </div> ); } ``` 在这个例子中,我们定义了一个名为 `count` 的状态变量及其更新函数 `setCount`。点击按钮将分别增加或减少 `count` 的值,并导致组件重新渲染以展示最新的状态。 综上所述,`useState` 是构建现代 React 应用不可或缺的一部分,尤其适合那些不需要复杂生命周期方法或错误边界处理的场景。随着 React 生态系统的不断发展,越来越多开发者倾向于采用函数组件配合各种 Hooks 来开发高效、易于测试的应用程序[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值