亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

何時使用ReactisesetState回調

何時使用ReactisesetState回調

慕姐4208626 2019-07-03 16:51:43
何時使用ReactisesetState回調當ReactiveComponent狀態發生變化時,將調用Render方法。因此,對于任何狀態更改,都可以在呈現方法主體中執行操作。那么,對于setState回調是否有特定的用例?
查看完整描述

3 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

是的,因為setState工作于asynchronous方式,道路。這意味著在打電話后setState這個this.state變量不會立即更改。因此,如果要在設置狀態變量的狀態后立即執行操作,然后返回結果,則回調將非常有用。

考慮下面的例子

....changeTitle: function changeTitle (event) {
  this.setState({ title: event.target.value });
  this.validateTitle();},validateTitle: function validateTitle () {
  if (this.state.title.length === 0) {
    this.setState({ titleError: "Title can't be blank" });
  }},....

以上代碼可能無法按預期工作,因為title變量在對其執行驗證之前可能沒有發生變異?,F在,您可能會想知道我們是否可以在render()函數本身,但是如果我們能夠在changeTitle函數本身中處理這個問題,它會更好,更干凈,因為這會使您的代碼更有組織性和可理解性。

在這種情況下,回調很有用。

....changeTitle: function changeTitle (event) {
  this.setState({ title: event.target.value }, function() {
    this.validateTitle();
  });},validateTitle: function validateTitle () {
  if (this.state.title.length === 0) {
    this.setState({ titleError: "Title can't be blank" });
  }},....

另一個例子是當你想dispatch以及狀態改變時的行動。您將希望在回調中執行此操作,而不是在render()因為它將被稱為每次重命名發生,因此許多這樣的場景是可能的,在那里您將需要回調。

另一個案例是API Call

當您需要根據特定的狀態更改進行api調用時,可能會出現這樣的情況,如果在呈現方法中這樣做,則在每次呈現時都會調用它。onState更改,或者是因為某些支持傳遞給了Child Component變化。

在這種情況下,您可能希望使用setState callback將更新的狀態值傳遞給api調用

....changeTitle: function (event) {
  this.setState({ title: event.target.value }, () => this.APICallFunction());},APICallFunction: function () {
  // Call API with the updated value}....


查看完整回答
反對 回復 2019-07-03
?
DIEA

TA貢獻1820條經驗 獲得超2個贊

在我的腦海中出現的1.用法是api調用,它不應該進入呈現,因為它將運行each狀態改變。而api調用應該只在特殊狀態變化時執行,而不是在每一,每個渲染。

changeSearchParams = (params) => {
  this.setState({ params }, this.performSearch)} performSearch = () => {
  API.search(this.state.params, (result) => {
    this.setState({ result })
  });}

因此,對于任何狀態更改,都可以在呈現方法主體中執行操作。

非常糟糕的做法,因為render-方法應該是純的,它意味著沒有操作、狀態更改、API調用,應該執行,只需要組合視圖并返回它。應該只對某些事件執行操作。呈現不是一個事件,而是componentDidMount例如。


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 725 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號