垃圾React设计问题集中讨论/记录 #1180
Replies: 6 comments 8 replies
|
不对。更新了单一个 entry 后要更新整个list 是对的 问题是这个 commit useEffect(() => {
let isMounted = true;
// 先从 cache 读取,避免重复请求相同 uuid 的 metadata
Promise.all(
script.map(async (item) => {
let metadata = cache.get(item.uuid);
if (!metadata) {
const script = await scriptDAO.get(item.uuid);
if (script) {
metadata = script.metadata || {};
}
cache.set(item.uuid, metadata);
}
return { ...item, metadata: metadata || {} };
})
).then((newScriptMenuList) => {
if (!isMounted) {
return;
}
updateScriptMenuList(newScriptMenuList);
});
return () => {
isMounted = false;
};
}, [cache, script]);即使 item reference 没改变,也会因为 |
|
在卡片模式的ScriptCard有同样的重绘问题!
React.memo 中的参考对比是没改变 發現了 hooks.tsx 有一些介乎於 React元件定義 和 一般function 兩者之間的奇怪東西 |
|
你太极端了,React确实很容易触发 re-render,需要自己手动使用memo之类的方法去进行优化(React 19 引入了 React Compiler,能在编译阶段自动分析代码依赖,自动加上 memoization,不知道值不值得一试),这点甚至是React的设计哲学,比Vue更精准的控制,但这大多数都不是框架的问题,通常都是业务代码的问题,这点我只能承认我写的代码垃圾,用好React确实需要有比Vue更强的编码能力。 React有庞大的生态,全球顶级产品都在用 React,说明它经得起实战考验,并且也有RN、next.js等多平台框架,不能因为一点而否定全盘。 |
|
做个记录 我知道看起来是多余的操作 这是一个非常经典且硬核的 React 性能优化问题。对于不了解 React 的人来说,这段代码看起来确实是“脱裤子放屁”——明明可以直接一步到位,为什么要先转成字符串,再切回数组? 简单来说:这是一种“空间换时间”和“牺牲局部逻辑简洁,换取整体渲染性能”的黑科技技巧。 以下是详细解释: 核心矛盾:React 的“肉眼”与“内存地址”在 React 中,系统判断“数据是否变了”并不是挨个看数组里的内容,而是看这个数组在内存里的地址(引用)。 1. 直接用
|
|
https://github.com/millionco/react-doctor https://github.com/aidenybai/react-scan 发现了几个react质量检查的项目,感觉可以试试 |





Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
React 就是垃圾
React is Rubbish
All reactions