javascript - React数据获取为什么一定要在componentDidMount里面调用?
ringa_lee
ringa_lee 2017-04-11 11:30:06
[JavaScript讨论组]

根据文档说法,从后台获取数据一定要放在componentDidMount里面调用,为什么不能在constructor或者componentWillMount里面调用?有什么不同?

ringa_lee
ringa_lee

ringa_lee

全部回复(5)
伊谢尔伦

constructor()中获取数据的话,如果时间太长,或者出错,组件就渲染不出来,你整个页面都没法渲染了。
componentDidMount()中能保证你的组件已经正确渲染。

PHP中文网

1、通常我在componentWillMount发送ajax(渲染dom之前做的操作)

2、componentDidMount也可以做ajax操作(渲染dom完成之后做的操作)

那么,这2种情况如何区分呢?

需求1:

当你的render函数需要有数据才能渲染的时候,就在componentWillMount做操作。
render() {
    return data && <p>{data}</p>
}

需求2:

当你的render不需要数据,先渲染dom结构,就在componentDidMount操作。
render() {
    const { data } = this.props
    return (
        <p>
            <span>我要先渲染</span>
            <span>{data || ''}</span>
        </p>
    )
}
大家讲道理

你既然了解的周期的顺序,那就很好理解了啊!willMount在dom没有渲染前先进行的方法,如果这个时候请求ajax那么势必会有等待的这一刻,然后排队渲染dom,而didMount是在dom加载后在进行的方法,而这个时候请求ajax前面没有任何等待,直接请求,然后如果你setState那么整个虚拟dom会在此渲染,此时再将获得的数据进行渲染,这样就感觉很顺的就执行下去了。而再次渲染的同时大部分的dom都是没有改变的,只有部分改变,所以渲染的速度会很快

高洛峰

因为有很多前置工作要做

PHP中文网

感谢各位的回答:
总结一下不建议在constructor和componentWillMount里写的原因是

  1. 会阻碍组件的实例化,阻碍组件的渲染

  2. 如果用setState,在componentWillMount里面触发setState不会重新渲染

而在React Redux中,由于触发的渲染方式不同,是可以不需透过React组件的生命周期方法,所以我感觉可以在生命周期的任何地方调用。当然,在consttructor和componentWillMount还是会阻碍一点点组件的实例化和渲染。

由于@eyesofkids写的全面一点,我采纳他的了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号