標籤:

關於在react中request到底是應該寫在哪裡?

近期在做項目的時候,關於這個頁面初始化的時候請求數據這個問題,剛開始忘了在哪裡看到說是request應該放在componentDidMount中,就這麼寫了,當時也沒注意,後來發現如果要是能寫在componentWillMount中,那數據不就載入的更快了,在componentDidMount里第一次渲染因為是沒數據的,所以我還判斷了一下加上了loading,看了下官方介紹:

官方介紹的說是推薦request寫在componentDidMount里,而且componentWillMount完全可以被構造函數取代,但是我覺得request在componentWillMount里會快一些啊,所以我對這個地方就疑惑了。stackoverflow上有大神說過這個問題,好像是關於什麼服務端的,對服務端不怎麼了解,希望大佬來解答一下


如果你要做 SSR,那麼不能放在 willmount 里做,因為一次在 server 拿,一次在 client 拿,放在 didmount 中那麼只會在 client 中拿。

如果你不關心 SSR,放在 willmount 里的確會在 render 前請求數據感覺會好一些,不過請求是非同步,總是會在 render 後再更新,還是會先 render。但在 didmount 里請求的好處是 state 已經初始化過了,一般在 constructor 里。不會出現可能後面 render 要用 this.state 時沒有值。


謝邀。

什麼叫request?指的是發一個AJAX的request還是啥?

問題一定要問得清晰具體,不然別人也幫不上啥忙。

把問題講清楚之後再來邀我。


willMount或者didMount都可以,哪裡能完成你的需求就放哪裡,不必糾結。

不過,如果你的系統足夠規模,或者是存在數據共享的場景的話,可以考慮上redux或者Mobx這類模塊,然後在action階段去請求數據,react組件應該只關注它的狀態。

以上,有不足歡迎斧正和討論


首先,頁面訪問速度的快慢和你在哪個位置發請求關係不大。取決於網路和你採用的架構。一般來說,數據都是通過 Props 傳進來的。保障組件的純粹很重要~


didMount 比較好。


看題主描述應該不做ssr(服務端渲染)

我下面的論述都以不做ssr為基礎。

題主說的request是指ajax請求吧?

如果我們的ajax是一個synchronized(非同步的)請求

那麼其實對於你在willmount還是didmount去請求其實效果是一樣的。因為發出請求不會阻塞你組件的mount或者說render。

你的請求得到response之後到了你能夠進行處理的時候其實你要操作的組件已經經過一次渲染render了。

那麼這種情況下你放在willmount還是didmount區別其實並不大。

如果這個請求是一個asynchronized(同步的)請求

那麼在willmount的時候去請求你的數據會導致當前以及後續組件沒發即時mount上。需要等待你的請求處理完才會繼續載入。這時候會出現白屏。用戶體驗賊差。所以為了避免這種情況的出現。其實是不建議在willmount的時候去請求數據以及做大量運算。

所以題主你原來加上loading狀態的做法其實非常好。使組件能夠立即mounting上。又給用戶友好提示。這時候進行載入數據操作。數據返回並且處理好傳入組件中。進行重新渲染。


沒什麼區別

will mount和did mount的時間差通常遠小於http請求需要的時間


推薦閱讀:

為什麼在知乎上 React 的評價這麼低?
使用react開發,大家使用什麼IDE工具?JSX語法報錯?
問一個react更新State的問題?
在用react的時候老大不讓用jquery,為什麼?

TAG:React |