我可以在ReactDOM.render回调中做一些初步的工作吗?

时间:2017-03-06 02:28:55

标签: reactjs

我发现ReactDOM.render有一个callback参数。

ReactDOM.render(element, container, [callback]);

所以,我的想法是,也许我可以在其中做一些初步的工作。

可以是:

调度全局操作以从服务器获取数据以初始化我的全局 状态。

我的问题是我想让我的组件尽快呈现。

在呈现静态内容之后,我将执行一些ajax运算符来获取数据。

那有用吗?或者,我可以用callback参数来做什么?

这是我的情况:

目前,src/index.js

//some initial work
//sync and async work.
//...

ReactDOM.render(<App/>, document.getElementById('app'))

我的想法是像这样改变src/index.js

ReactDOM.render(<App/>, document.getElementById('app'), () => {
    //some initial work
    //sync work will block the html parse and render.
    //my idea is let react component render as soon as possible
})

我不知道我的想法是否正确。谢谢你的回复。

修改

初始工作不仅仅意味着ajax,可能是cordovanative client提供的内容。

1 个答案:

答案 0 :(得分:2)

对于您尝试使用它的任务,无需使用render()方法回调。 实际上,据我所知,这个回调不是为了发出初始化请求;实际上,您将无法访问回调中的组件,而您可能需要在初始化时设置某些状态 做...

编辑后的部分注释:我对ReactDOM渲染回调的个人观点是,它最有用的是将React与另一个不知道React的库/框架集成。例如:在组件呈现时,只要在DOM树中可用,就需要执行操作;一旦调用了render回调,你就确定该组件已经被渲染到DOM了。

在您的情况下,我宁愿创建根组件并委托AJAX调用。我会渲染一个App组件,然后呈现所有其他组件。在这个App组件中,我将在componentDidMount中进行初始化。

另一种选择是创建容器组件,即。具有“包装”更简单组件的逻辑的组件。然后,像以前的解决方案一样实施componentDidMount

一些灵感:React AJAX best practices