我对React Lifecycle中的数据更新有疑问。
NewsTable子组件从父组件接收props(查询),然后父组件调用数据库并呈现表。父级还将发送更新的道具(新查询),以便更新表格。如果父级激发相同的查询两次,则该表不应该更新(也就是说,它不应该使用相同的查询继续命中数据库)。现在,我想使用shouldComponentUpdate来处理这个问题,但最终我会使用" debounce"库。
这是一个代码段:
import React from 'react';
var NewsTable = React.createClass({displayName: "NewsTable",
getDefaultProps: function() {
return {
};
},
getInitialState: function() {
return {
query: null
};
},
componentWillMount: function() {
this.loadData(this.props.query);
},
componentDidMount: function() {
},
componentWillUnmount: function() {
},
loadData: function(query) {
// time-consuming async, return "data"
this.setState({
query: query,
data: data
});
},
componentWillReceiveProps: function(newProps) {
},
shouldComponentUpdate: function(newProps, newState) {
if (newState.query != newProps.query) {
return true;
} else {
return false;
}
},
componentWillUpdate: function(newProps, newState) {
this.loadData(newProps.query);
newState.query = newProps.query;
},
componentDidUpdate: function(oldProps, oldState) {
},
render: function() {
console.log("NewsTable -> render");
if (this.props.query != null) {
return <div/>
}
}
});
export default NewsTable;
这里的NewsTable是一个子组件,它接收一个&#34;查询&#34; prop,向数据库发送请求,然后呈现表。
具体做法是:
现在当父组件更改查询道具时会发生什么?
在这种情况下,更新的道具调用shouldComponentUpdate - &gt; componentWillUpdate - &gt; loadData - &gt; setState() - &gt; shouldComponentUpdate ???它进入了一个无限循环。
我应该如何最好地更新代码段以处理更新的查询道具,并阻止重复调用?