我发现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
,可能是cordova
或native client
提供的内容。
答案 0 :(得分:2)
对于您尝试使用它的任务,无需使用render()
方法回调。
实际上,据我所知,这个回调不是为了发出初始化请求;实际上,您将无法访问回调中的组件,而您可能需要在初始化时设置某些状态
做...
编辑后的部分注释:我对ReactDOM渲染回调的个人观点是,它最有用的是将React与另一个不知道React的库/框架集成。例如:在组件呈现时,只要在DOM树中可用,就需要执行操作;一旦调用了render回调,你就确定该组件已经被渲染到DOM了。
在您的情况下,我宁愿创建根组件并委托AJAX调用。我会渲染一个App
组件,然后呈现所有其他组件。在这个App
组件中,我将在componentDidMount
中进行初始化。
另一种选择是创建容器组件,即。具有“包装”更简单组件的逻辑的组件。然后,像以前的解决方案一样实施componentDidMount
。