Open youngwind opened 8 years ago
请问有没有例子可以给看看
@kunzhijia 完整的代码demo没有保留下来。按着思路走不能复现吗?你自己写得怎么样?能否给我看看你的demo?
謝謝分享,最近剛好對於這種lifecycle api有深刻的體會,看了這篇更加確定正確做法。 感激
cool
是需要在componentDidMount中获取到loading DOM吗,这样岂不是就是在react中操作dom?有更好的实现方式吗?
的确是在 React 中操作了 DOM,但 React 操作的不是 React 渲染出来的 DOM,而是 root 以外的 DOM,所以我觉得问题并不大。 @stoneox
很赞
概括一下思路大概是:
6666666666666666
不错 这种方式确实很好
系列说明
嗯,要想成为一个专业的前端,不懂交互动画可不行。所以借着做项目,顺便好好研究一下这个方向,希望能给团队带来一些提升。
本篇要解决的问题
如果你用react+webpack做过单页面应用,那么你一定遇到过bundle.js太大导致首次加载时白屏时间过长,解决办法有几个方向。
首次尝试
一开始我是这么想的:既然bundle.js还没加载完,那么我就把动画的DOM和CSS写在index.html里面就好了。
结果:
究其原因,无非是react在首次渲染真实DOM元素之前,会清空root里面的DOM元素。
再次尝试
找到原因之后我转换了一下思路:我能不能捕获到react即将渲染真实DOM元素,然后在那之前进行处理呢?比如这样子
事实证明此方法不可行。在执行到这儿的时候,我根本找不到让react组件延时挂在到真实DOM的入口,也就是如何在WillMount和Mount之前设置一个setTimeout,我找不到方法。
再接再厉
后来忽然想到一种方法,那就是把动画元素放在root之外,这样react就能自由地控制了。
然后,在componentDidMount之后给loading添加消退动画,这样子就可以实现了。 而且,通过这种方法,你可以精确地控制loading遮罩层的消退时机。实际上我在应用的时候不是在componentDidMount的时候就消退的。因为我里面有数据请求,而这个数据请求至关重要,没有数据展示该页面根本没有意义。所以我索性将消退时机推迟到数据返回成功。这样做的好处有两个。
最后给个截图