我是新來react-router
和現在我有我的應用程序下面的呼叫路由用於連接到Github API並檢索特定回購的問題列表。 。無限componentDidUpdate()與反應路由器
然後在Results
組成步驟下面的代碼爲它的componentDidMount()
:
componentDidMount() {
const {
username,
reponame,
page,
perPage
} = this.props.params;
this.sendRequest(username, reponame, page, perPage);
}
sendRequests
主要包含AJAX查詢用於讀取的輸出數據,在此之後它被設置到組件的狀態:
this.state = {
data: [], // here
lastPage: -1,
errorMessage: ''
}
現在這個工作很好,直到想要改變input
的值。我看到,Result
組件不會卸載。它調用componentWillReceiveProps()
並更新現有組件。 AFAIK在componentDidUpdate()
執行旁路電話是安全的,所以我剛剛從componentDidMount()
複製上面的代碼並粘貼在那裏。這樣,雖然(這是絕對合理的)componentDidMount()
被一遍又一遍地調用。
我此刻想出了唯一的解決方法是在sendRequest()
本身比較新舊數據並調用setState()
它裏面只有當它通過deep-equal
包不同,所以它看起來像這樣:
if (!equal(res, this.state.data)) {
this.setState({
...this.state,
data: res,
lastPage
});
}
這被認爲是一個好的模式,或者有更好的方法來解決這個問題?
你可以做一個字符串比較,如果你既字符串化的對象,這應該會更快。但是如果你只是比較狀態中的數據,那麼它就足以調用'this.setState({data:res})' – Raulucco