V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chainchan
V2EX  ›  React

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

  •  
  •   chainchan · 2020-07-10 19:20:17 +08:00 · 2552 次点击
    这是一个创建于 1600 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 render 里面实现了一部分渲染的工作,但没有把对应 Component 的内容全部写入 render,
    因为在 initial load 时,某些 dom 节点还没被创建,
    直到 render() 之后跑到 componentDidMount() 时,这些 dom 节点才出现,
    所以在这里手动 render 另一部分的内容。

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

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

    <Parent>
    {mounted && <Child /> }
    </Parent>
    liberty1900
        9
    liberty1900  
       2020-07-11 00:52:13 +08:00 via Android
    打个广告,我正在找 react 相关的工作,北京,1 年经验,目前在这个论坛疯狂试探
    theprimone
        10
    theprimone  
       2020-07-11 09:52:43 +08:00
    这操作可太秀了,都这些圈子是图啥 _(:3J∠)_
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5962 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:24 · PVG 14:24 · LAX 22:24 · JFK 01:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.