我想實現的掃雷艇與之反應的孩子的狀態更新。我有其尺寸和炸彈的數量是可以改變的,因此應用程序組件狀態(sizeX
,sizeY
和bombNumber
)將被更新頁眉部件(未示出),並且這些值將被向下發送到Table
組分作爲道具。陣營基於父母的道具變化
我的問題是,Table
組件狀態取決於App
組件的道具當createTable()
方法得到的道具更新調用它採用了更新的sizeX
和sizeY
道具(這是很好的,當然),但由於某種原因它使用的bombNumber
道具以前的值。
這是正確的做法嗎?如果是的話,我錯過了什麼?
class App extends Component {
constructor (props) {
super(props);
this.state = {
sizeX: DEFAULT_SIZE,
sizeY: DEFAULT_SIZE,
maxBombNumber: DEFAULT_BOMB_NUMBER,
bombNumber: DEFAULT_BOMB_NUMBER
}
updateSize (val, side) {
this.setState({[side]: val}, function() {
this.setState({maxBombNumber: this.calculateMaxBombNumber()}, function() {
if (this.state.maxBombNumber < this.state.bombNumber) {
this.setState({bombNumber: this.state.maxBombNumber}, function(){
});
}
});
});
}
render() {
return (
<div className="App">
<Table
sizeX={this.state.sizeX}
sizeY={this.state.sizeY}
bombNumber={this.state.bombNumber}
/>
</div>
);
}
}
Table.js
class Table extends Component {
constructor (props) {
super(props);
this.state = {
table: this.createTable()
}
componentWillReceiveProps(nextProps) {
this.setState({table: this.createTable()});
}
createTable() {
// function using sizeX, sizeY and bombNumber
}
}
更新:
如果我改變狀態控制檯日誌這裏打印出正確的價值觀,但孩子將使用舊值bombNumber
。
updateSize (val, side) {
this.setState({[side]: val}, function() {
this.setState({maxBombNumber: this.calculateMaxBombNumber()}, function() {
if (this.state.maxBombNumber < this.state.bombNumber) {
this.setState({bombNumber: this.state.maxBombNumber}, function(){
console.log(this.state);
});
}
});
});
}
你確定這種情況下正確的工作,你如何期望? '如果(this.state.maxBombNumber
chuve
我這麼認爲,如果限制是'maxBombNumber',並且當前'bombNumber'大於那麼它應該減少。 –
「,但由於某種原因,它使用bombNumber道具的先前值。「 - 如果沒有,你有prev的bombNumber值嗎?就是這樣嗎?對於誤解感到抱歉。 – chuve