想知道 Component 的内容全部要写入 render()才是最佳实践?

2020-07-10 19:20:17 +08:00
 chainchan
在 render 里面实现了一部分渲染的工作,但没有把对应 Component 的内容全部写入 render,
因为在 initial load 时,某些 dom 节点还没被创建,
直到 render() 之后跑到 componentDidMount() 时,这些 dom 节点才出现,
所以在这里手动 render 另一部分的内容。

请教一下这样做是不是一开始的方向就错了?
2376 次点击
所在节点    React
10 条回复
zzuieliyaoli
2020-07-10 19:58:06 +08:00
没毛病,可以这样搞
ericls
2020-07-10 21:50:52 +08:00
手动 render? 会新建一个 tree 吧? 所有 context 会丢失的
hronro
2020-07-10 21:55:08 +08:00
贴代码吧。
听你的描述,感觉不像是正确的做法
chainchan
2020-07-10 22:50:10 +08:00
chainchan
2020-07-10 22:53:17 +08:00
@hronro #3 已贴核心部分的代码
liberty1900
2020-07-10 23:03:35 +08:00
代码写的好诡异,处理业务逻辑就处理业务逻辑,业务逻辑处理完产生的数据作为状态放到 UI 里。看代码是想每一次 render 的时候都去调用处理业务逻辑的函数,componentDidMount, componentDidUpdate 都调用处理业务逻辑的函数就完了。用函数组件就更简单了,组件本身是函数,如果不是复杂或者需要复用的逻辑,直接写在函数主体里
chainchan
2020-07-10 23:47:54 +08:00
@liberty1900 #6 我目前这个做法:是在 componentDidMount, componentDidUpdate 都调用了 renderView, 只是没有放到 render 里面去做。完全是可以 work 的,而且 performance 也能够接受,render 10000 个 entity 的同时,点击、拖拽没有什么卡顿。

我是想知道,如果不把 renderView 放到 render 里面,是不是会违反 React 的设计原则?或者有没有什么可能的潜在问题?
liberty1900
2020-07-11 00:29:18 +08:00
直接 ReactDOM.render 手动渲染我是觉得很奇怪,如 2 楼所说,context 会丢失,不能很直接的表示父子关系.
如果子组件必须在父亲 did mount 之后才可以渲染的话也很简单,父组件加个状态 mounted, jsx 大概是这样

<Parent>
{mounted && <Child /> }
</Parent>
liberty1900
2020-07-11 00:52:13 +08:00
打个广告,我正在找 react 相关的工作,北京,1 年经验,目前在这个论坛疯狂试探
theprimone
2020-07-11 09:52:43 +08:00
这操作可太秀了,都这些圈子是图啥 _(:3J∠)_

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

https://www.v2ex.com/t/689001

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

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

© 2021 V2EX