ReactJS,Baobab,Material-UI應用程序顯示一些項目,用它們的數字ID標識。要顯示這些內容,標題和圖片url將通過ajax從遠程服務中檢索。樹枝存儲了數據:如何在React組件呈現之前更新猴麪包樹葉數據?
data: {
12345: {title:'ABC', image:'https://...'}, // id is 12345
12346: {...
}
在項目組件創建和第一呈現,其擴展的數據可能會或可能不會在樹中已經可用。如果不是,則ajax調用將被接受以接收該數據。可能會發生多個項目使用相同的項目ID創建。
爲了避免對同一個ID的額外請求,我想在第一次請求該ID的信息時將一個僞信息{title:'loading', image:'spinner.gif'}
放入樹中。因此這個數據將被用於第一個render()
。連續的組件會得到這個虛擬信息,並且不會發起任何額外的請求。
問題:如何以及我可以在哪裏放置代碼以測試樹是否還沒有信息,並在那裏放置虛擬表示其「掛入」狀態並排入請求?
到目前爲止已經試過:
- 組件
constructor
- 道具設置不存在尚未; componentWillMount()
- 儘管tree.commit()
設置了虛擬值之後,第一個渲染以樹的舊狀態開始;- 在分支函數中動態創建指向其數據的組件光標。得到了警告:
的setState(...):現有的狀態轉變(如
render
內)期間,不能更新。渲染方法應該是道具和狀態的純函數。
這可以解決上一級 - 一旦id列表可用。但是一個組件應該能夠在其內部處理其數據是正確的。
請指教一個正確的方法,以便在組件內第一次渲染React組件之前立即更新Baobab樹數據?
感謝您的回答!我會重新檢查 - 我的設置唯一的差異是你在另一個函數(action)中調用'tree.update()',而我在'componentWillMount()'主體中測試了它。同時我又回到父組件的預取中,因爲它允許將多個ajax調用分組到一個組件中。 – Serge
對於每條路線我有一個頁面組件(這就像佈局),並只在其中調用預取。這個預取補充值從serverPrefetch獲得(在服務器上呈現)。換句話說,我嘗試只有一個預取,類似於每個路由上的服務器。 我認爲我們正在使用類似的解決方案 – Yozi