2017-03-06 57 views
2

我找到ReactDOM.render有一個callback params。我可以在ReactDOM.render回調中做一些初始工作嗎?

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

所以,我的想法是,也許我可以做一些初步的工作。

它可以是:

派遣全球行動,以從服務器獲取數據初始化我的全球 狀態。

我的問題是我想讓我的組件儘快呈現。

在呈現靜態內容之後,我將執行一些ajax操作符來獲取數據。

這是工作嗎?或者,我該怎麼用callback params?

這裏是我的情況:

現在,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

提取不應該被阻止。也許你正在做一些阻塞的重處理,但這可以在工作人員中完成。 – Aaron

+1

在componentDidMount()方法中提取數據。 – c0deNinja

+0

@ c0deNinja是的,我可以做到這一點。但我想知道我能用'react-dom render callback'做什麼? – novaline

回答

2

對於您嘗試使用它的任務,沒有必要使用render()方法回調。事實上,據我所知,這個回調並不意味着發出初始化請求;的確,你將不能訪問到組件的回調,而您可能需要設置一些狀態,當初始化完成 ...

以下意見編輯的部分:我的ReactDOM個人觀點呈現回調是因爲它將React與另一個庫/框架集成在一起,而不知道React。就像:你需要在組件被渲染時執行一個動作,只要它在DOM樹中變得可用;一旦調用渲染回調函數,就可以確定組件已經呈現給DOM。

就你而言,我寧願創建一個根組件並委託給它的AJAX調用。我會呈現一個App組件,該組件反過來呈現所有其他組件。在這個App組件中,我將在componentDidMount中進行初始化。

另一種選擇是創建容器組件,即。一個包含更簡單組件的邏輯組件。然後,像以前的解決方案一樣實施componentDidMount

一些靈感:React AJAX best practices

+0

然後,渲染回調是什麼?那裏有哪些類型的行動可能有用? – jmargolisvt

+0

感謝您的回覆。我知道你在說什麼。根容器組件''。是的,最近,我會嘗試將我的初始工作從'index.js'移動到'''componentDidMount'。我會看看'chrome'的'timeline'來尋找一些東西。 – novaline

+0

但是,我仍然想知道什麼時候應該使用'react-dom'' render''callback'。與@jmargolisvt相同。 – novaline

相關問題