2017-06-21 51 views
0

我有這種情況,我需要根據其選擇將sortAscending順序設置爲true或false。一旦我嘗試對其進行排序,將狀態更改爲true,並立即變回false。這在延遲加載列表中影響着我。React State自動更改爲false而不設置它

handleSortRoomsOnClick: function(sortBy) { 
    if(sortBy == this.state.sortBy) { 
     this.setState({ 
      isSortAsc: !this.state.isSortAsc, 
      page: 1 
     }); 
     this.handleFetchRooms(1, sortBy, this.state.isSortAsc); 
    } else { 
     this.setState({ 
      sortBy: sortBy, 
      isSortAsc: true, 
      page: 1 
     }); 
     this.handleFetchRooms(1, sortBy, true); 
    } 
}, 
+1

不知道這是一個問題,但使用一個回調'setState'使用以前的狀態,並確保您的狀態設置正確:'this.setState(prevState =>({isSortAsc:!prevState.isSortAsc,page:1}))' – Li357

回答

1

問題是setState是異步的。您無法設置它,然後立即參考值this.state.isSortAsync。所以,你可以將它保存在下面的變量中,或者在setState中使用回調。

handleSortRoomsOnClick: function(sortBy) { 
    if(sortBy == this.state.sortBy) { 
     const isSortAsc = !this.state.isSortAsc; 
     this.setState({ 
      isSortAsc: isSortAsc, 
      page: 1 
     }); 
     this.handleFetchRooms(1, sortBy, isSortAsc); 
    } else { 
     this.setState({ 
      sortBy: sortBy, 
      isSortAsc: true, 
      page: 1 
     }); 
     this.handleFetchRooms(1, sortBy, true); 
    } 
} 

編輯:我想這可能凝結了一下:

handleSortRoomsOnClick(sortBy) { 
    const isSortAsc = (sortBy === this.state.sortBy) ? !this.state.isSortAsc: true; 
    this.setState({ 
     sortBy, 
     isSortAsc, 
     page: 1 
    }); 
    this.handleFetchRooms(1, sortBy, isSortAsc); 
} 
相關問題