useState和ahooks中的useSetState的优缺点

useState 和 useSetState 都是 React Hooks 中用于管理组件状态的工具。

useState

优点:
  1. 简洁性useState 是 React 官方推荐的 Hook,用于状态管理,其语法简单直接。
  2. 易于理解和使用:对于初学者来说,useState 的概念和使用方式非常直观。
  3. 性能优化:当状态更新时,React 会进行批处理,将多个状态更新合并成一个重渲染过程,从而提高性能。
  4. 广泛支持:由于它是官方的一部分,所有现代的 React 版本都支持它,不需要额外的依赖。
缺点:
  1. 复杂状态更新:当状态更新依赖于前一个状态时,你必须使用函数形式的 setState 调用,这可能会使代码稍微复杂一些。
  2. 状态合并:如果你的状态是一个复杂的对象或数组,合并部分更新可能需要手动处理,这可能导致代码冗长或错误。

useSetState

优点:
  1. 状态合并useSetState 提供了一种更优雅的方式去更新复杂的状态,尤其是当你需要合并部分状态更新时。
  2. 减少代码量:对于复杂的对象或数组状态,useSetState 可以通过浅合并(shallow merge)或深合并(deep merge)来简化状态更新的代码。
  3. 更好的可读性:通过使用合并策略,可以使得状态更新的意图更加清晰,提高代码的可读性。
缺点:
  1. 非官方支持useSetState 不是 React 官方提供的 Hook,而是由社区开发的,这意味着它可能不会得到同样的长期支持或更新。
  2. 兼容性问题:使用第三方库意味着你需要引入额外的依赖,这可能会带来兼容性问题或增加构建大小。
  3. 学习曲线:对于不熟悉 useSetState 或其具体实现的开发者来说,这可能需要额外的学习成本。

用法对比:

import React, { useState } from 'react';

function Example() {
 const [done, setDone] = useState<boolean>(false);
  const [visible, setVisible] = useState<boolean>(false);
  const [confirmVisible, setConfirmVisible] = useState<boolean>(false);
  const [currentRow, setCurrentRow] = useState<Partial<TableListItem> | undefined>(undefined);
  const [showDetail, setShowDetail] = useState<boolean>(false);
  const [selectedRowsState, setSelectedRows] = useState<TableListItem[]>([]);
  const [progressVisible, setProgressVisible] = useState<boolean>(false);
  const [successNum, setSuccessNum] = useState<number>(0);
  const [failNum, setFailNum] = useState<number>(0);

  return (
    <div>
    </div>
  );
} 
import React from 'react';
import { useSetState } from 'ahooks';

function Example() {
  const [state, setState] = useSetState<StateType>({
    done: false,
    visible: false,
    confirmVisible: false,
    successNum: 0,
    failNum: 0,
    progressVisible: false,
    selectedRowsState: [],
    currentRow: undefined,
  })

  return (
    <div>
    </div>
  );
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值