惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
量子位
D
DataBreaches.Net
博客园 - 司徒正美
J
Java Code Geeks
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
B
Blog
The Cloudflare Blog
D
Docker
I
InfoQ
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
腾讯CDC
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
小众软件
小众软件
S
SegmentFault 最新的问题
GbyAI
GbyAI
有赞技术团队
有赞技术团队

串串狗小刊 ⭐️

Web 出海之域名商、托管商等一定要分开 - 串串狗小刊 - 聊AI、互联网、前端技术 ~ 程序员下班以后做什么副业合适? - 串串狗小刊 - 聊AI、互联网、前端技术 ~ 终极拷问:用户的登录信息放哪里? - 串串狗小刊 - 聊AI、互联网、前端技术 ~ 5个 link 标签,突破前端性能瓶颈! - 串串狗小刊 Web 出海让你结束上班时代! - 串串狗小刊 - 聊AI、互联网、前端技术 ~ 注意!程序员不要使用 设计模式 了! - 串串狗小刊 Web 出海之品牌站如何应对被别人侵权 - 串串狗小刊 - 聊AI、互联网、前端技术 ~ Web 出海之一些广告流量主方案和 SaaS 站没必要搞社区 - 串串狗小刊 年轻人怎么抓住 AI 发展的风口? - 串串狗小刊 为什么 GO 语言地位很尴尬? - 串串狗小刊 Web 出海必备的外链列表 - 串串狗小刊 - 聊AI、互联网、前端技术 ~ 我的 Web 3D 世界梦 - 串串狗小刊 OPC Web 出海之图视频的 AI 供应商渠道和简单外链 - 串串狗小刊 简单聊聊我的 Nodejs 世界观 - 串串狗小刊 Web 出海快速判断关键词法和推荐 3 个 SKILL - 串串狗小刊 Web 出海之演示建站盈利和朋友 Reyn 的教训 阅读源代码前要运行的 5 条 Git 命令 - 串串狗小刊 介绍几组我一直在使用的 Codex 插件 我观看哥飞年终会议复盘的 Web 出海笔记(下) - 串串狗小刊 观看哥飞年终会议复盘的 8 个 Web 出海笔记 - 串串狗小刊 Codex 敞开用的技巧和谷歌趋势的参考词 - 串串狗小刊 - 聊AI、互联网、前端技术 ~ Web 出海之外链提交频率和如何不花 Token 处理代码 - 串串狗小刊 程序员现在的最佳副业 ~ Web 出海 - 串串狗小刊 如何设计良好的 API - 串串狗小刊 - 聊AI、互联网、前端技术 ~ 你跟 AI 对话后会发生什么? - 串串狗小刊 出海 Web 之 GSC 里的曝光量和点击量和外链的关系 - 串串狗小刊 出海 Web 不要 恋战 新词游戏站 - 串串狗小刊 无港卡开通 Stripe 收款和 Nofollow 转 Dofollow 技巧 - 串串狗小刊 DeepSeek 发布氮气加速器 DSpark!可惜好东西又开源了 - 串串狗小刊 简单聊聊出海 Web 的游戏站 - 串串狗小刊
其实 React 有点难用 - 串串狗小刊
独元殇 · 2026-05-08 · via 串串狗小刊 ⭐️

论开发体验,Vue 是肯定大于 react 的,毕竟简单,上手快,但是之所以选择 react ,还是因为生态,尤其是 nextjs 的生态。没办法。

react 的坑很多啊!

先是那个很让人头疼的 HTML ?? 其实是 JSX 。不是 HTML ,跟 HTML 没有多大关系。

初学者会发现里面混入了一个奇怪的东西:

<></>

这是什么?这是一个 容器!防止 < div > 不断进行堆叠成一大坨的!因为 JSX 只能有一个根元素,外面得包裹 div,每个组件都得搞一个根节点,比如这里的 main:

return (
  <main>
    <h2>欢迎光临</h2>
    <span>这是我们的新网站!</span>
  </main>
);

// 但是容易把布局搞乱,因此就引入了一个概念叫 React.Fragment

return (
  <React.Fragment>
    <h2>欢迎光临</h2>
    <span>这是我们的新网站!</span>
  </React.Fragment>
);

// 使用语法糖 <></> ,和上面这个等同

return (
  <>
    <h2>欢迎光临</h2>
    <span>这是我们的新网站!</span>
  </>
);

这样就好多了。

妥协了,但是奇奇怪怪。不过也避免了各种 HTML 混乱,甚至布局混乱。当初,这一点让我觉得 react 真的有点设计的不给力,不好用。

另外还有 setState 、 setCount 这些概念,里面也有陷阱:

这个 setCount 是更新状态的吧,但是调用时,其实是不会立即改值的,它竟然是异步的!

react 呢美其名曰,这是优化性能:

import { useState } from "react";

export default function Test() {
  const [num, setNum] = useState(10);

  function change() {
    console.log("点击时,当前值是:", num); // 10

    setNum(20); // 改成 20!

    console.log("刚改完立刻打印:", num); // 其实还是 10!!!
  }

  return (
    <button onClick={change}>点我测试异步</button>
  );
}

然后,因为它是异步的,就又引申一个 陷阱!!!!

如果你一次性让它加 三次值 ,你会发现就加了一次!

import { useState } from "react";

export default function Test() {
  const [num, setNum] = useState(0);

  const add = () => {  // 让它加三次(实际上运行结果是只加了一次)
    setNum(num + 1);
    setNum(num + 1);
    setNum(num + 1);
  };

  return (
    <div>
      <h1>{num}</h1>
      <button onClick={add}>点我+3</button>
    </div>
  );
}

这是个抽象版本,。,实际上当年没少被这个 bug 坑。比如多次修改某组件的属性,组件仅仅只会有1次更新???而不是每次修改,状态都更新。

因为 useState 是异步的,所以不能这样写,要这样写:

import { useState } from "react";

export default function Test() {
  const [num, setNum] = useState(0);

  const add = () => {
    setNum(prev => prev + 1);  // 变化,就是 
    setNum(prev => prev + 1);  // num + 1 变成了 prev => prev + 1
    setNum(prev => prev + 1);  // 这样才行!
  };

  return (
    <div>
      <h1>{num}</h1>
      <button onClick={add}>点我+3</button>
    </div>
  );
}

这样才能拿到最新的值,再给下走。

太难用了。