useState vs setState:React状态管理,你站哪一队?

大家好,我是小杨,一个摸爬滚打了6年的前端老司机。今天咱们来聊聊React里两个最常用的状态管理方式------setStateuseState。虽然它们干的事儿差不多,但用起来可是有讲究的!

一、先说说setState(Class组件版)

以前用Class组件写React的时候,setState是我的好搭档。它有个特点: "异步更新"

举个🌰,我想记录点击按钮的次数:

jsx 复制代码
class Counter extends React.Component {
  state = { count: 0 };

  handleClick = () => {
    this.setState({ count: this.state.count + 1 });
    console.log(this.state.count); // 🤦‍♂️ 这里打印的还是旧值!
  };

  render() {
    return <button onClick={this.handleClick}>我点了 {this.state.count} 次</button>;
  }
}

坑点注意:

  1. setState是"批量更新"的,连续调用多次可能会被合并

  2. 想拿到最新值?用回调函数形式:

    js 复制代码
    this.setState(prevState => ({ count: prevState.count + 1 }), () => {
      console.log('现在是最新值:', this.state.count);
    });

二、再聊聊useState(函数组件Hook版)

自从Hook横空出世,函数组件也能有状态了!但useState的玩法有点不一样:

js 复制代码
function Counter() {
  const [count, setCount] = useState(0);

  const handleClick = () => {
    setCount(count + 1);
    console.log(count); // 😅 依然打印旧值!
  };

  return <button onClick={handleClick}>我点了 {count} 次</button>;
}

关键区别:

  1. 更新不会自动合并(需要用扩展运算符手动合并对象)

  2. 想拿到最新值?用函数式更新:

    js 复制代码
    setCount(prevCount => prevCount + 1);

三、终极对比表格

特性 setState (Class) useState (Hook)
更新方式 自动合并对象 需要手动合并
获取最新值 用回调函数 用函数式更新
异步表现 批量更新 闭包问题(需要留意)
代码量 啰嗦 简洁

四、我的实战建议

  1. 新项目直接用Hook:代码更简洁,未来趋势
  2. 老项目迁移别强求:Class组件还能再战500年
  3. 闭包问题要小心:在useEffect里用状态时,记得加依赖项

⭐ 写在最后

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.

✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式

✅ 认为我部分代码过于老旧,可以提供新的API或最新语法

✅ 对于文章中部分内容不理解

✅ 解答我文章中一些疑问

✅ 认为某些交互,功能需要优化,发现BUG

✅ 想要添加新功能,对于整体的设计,外观有更好的建议

✅ 一起探讨技术加qq交流群:906392632

最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!

相关推荐
前端摸鱼匠7 分钟前
Vue 3 的v-bind合并行为:讲解v-bind与普通属性合并的规则
前端·javascript·vue.js·前端框架·ecmascript
REDcker28 分钟前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
donecoding2 小时前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
风骏时光牛马2 小时前
Raku正则匹配与数据批量处理实操案例
前端
nbwenren2 小时前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川2 小时前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端
jinanwuhuaguo2 小时前
(第二十九篇)OpenClaw 实时与具身的跃迁——从异步孤岛到数字世界的“原住民”
前端·网络·人工智能·重构·openclaw
广州华水科技3 小时前
深度测评2026年单北斗GNSS位移监测系统推荐,与高口碑变形监测设备一同引领行业新风尚
前端
Alice-YUE3 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript