React 多人开发怎么确保性能,有没有最佳实践

165 天前
 Chuckle
一个小业务组件,随着需求迭代,越来越大,塞复杂表格、表单等等,上千行都有,导致状态一变连锁反应全都变,就算拆模块,也得 momo 、usecallback 啥的套,很容易又打破,也很麻烦。
像 data-grid 的案例都推荐用上下文去传数据了,避免小变化导致整个表格列重渲,但是在业务里用上下文多了,感觉更难维护数据流。

reference
5509 次点击
所在节点    React
38 条回复
shunia
165 天前
@shunia #20 加一句:react 或者 vue 等等几乎所有框架,都不是为了性能而生的。
kakki
165 天前
给弹窗组件一个 ref, 直接调用 ref 方法.鸡零狗碎的状态太多就很烦,能自我管理尽量自我管理.
lanten
165 天前
最佳实践是什么,是问出来的吗?这个推荐那个推荐,不如自己推荐
Gilfoyle26
165 天前
@liuidetmks #9 经典
leokun
165 天前
从业务角度来说,表单的性能高低不会有一毛钱的影响
cwwx2022
165 天前
我在网上看到了这个 https://shame-of-react.pages.dev/ ,是关于 react 的
hahaFck
165 天前
@shintendo 这样会有另外一个问题,就是弹窗关闭了,弹窗组件没有摧毁掉,在重新打开后,数据还是跟上次一样的,每次打开都是上次打开的结果,也挺烦的。
liuliancc
165 天前
@Dreamful #5 我一般父元素通过双向绑定 v-mode visible 控制,子元素 prop visible 、emit('change:visible', true/false),也不会重新渲染、丢失动画
jianv3
165 天前
虚拟列表。 几万条数据也无所谓
anivie
165 天前
@liuidetmks 真的卡的时候想去优化已经不可能了,只有重写,大部分卡的批爆的网页都是这么来的
AV1
165 天前
换个角度想,当你的数据有成千上万行时,你应该考虑提供分页、排序、搜索、筛选、摘要功能,方便用户定位到想要的数据。
Chuckle
165 天前
把 rxjs 和 context 结合起来咋样,需要暴露和传递的数据,别 props 一层层传状态,让组件订阅所需外部状态的变化,而不是从 props 中获取,感觉有空可以琢磨下
Chuckle
165 天前
@Chuckle #32 还真有现成的 https://react-rxjs.org/docs/getting-started ,确实能想到估计也有人做过了(
RedNax
164 天前
想集成 rxjs 可以看看 focal:
https://github.com/grammarly/focal
Dreamful
164 天前
@liuliancc 主要是组件加载时机,有时候不希望子组件一开始就加载,每次打开都重新加载。感觉不如父组件直接加 v-if 省事
realJamespond
164 天前
换 zustand 细粒度更新,直接子组件之间互相作用,绕过 state+context 从根组件全刷
lstmxx
164 天前
@hahaFck 写一个 reset 函数,close 的时候调用吧,我是这么做的
GiantHard
59 天前
@Chuckle #32 如果打算用 Context 传递 Observable 状态,不如用 mobx ,因为 rxjs 的 API 过于庞大(各种 operator, subject ),而 mobx 的 API 则要精简很多( observable, aciton, autorun/reaction, computed )。

另外,mobx 还有 babel/swc 的插件 https://github.com/christianalfoni/mobx-react-observer ,可以自动将组件包装成 observer ,代码中会少很多语法噪音。

除此之外,mobx 相比 rxjs 还提供了状态更新 transaction https://mobx.js.org/api.html#transaction ,这在很多时候也是避免由于重复渲染导致性能劣化的有效方法。

不过,选择用 mobx 这样的基于可变数据结构的状态库,就意味着你需要放弃正宗 React 味儿,会大量地打破 rule of hooks 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1143888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX