【发布时间】:2020-03-17 17:42:12
【问题描述】:
我有一个来自表对象的回调函数,我正在调试一些数据并希望在使用 this.setState() 更新表对象之前对其进行控制台记录。现在,我知道 this.setState 是异步的,但我仍然希望看到更新前的日志,但它却显示在更新后。
这里是回调函数:
onCellChange = (tableId, rowIdx, cellIdx) => e => {
const value = parseFloat(e.target.value);
console.log("TableID:", tableId);
console.log(tableData); //This prints the tableData object post-this.setState()
const tableTuple = { rowIdx, cellIdx, value, tableData, tableId };
this.setState({
tableData: updateInput(tableTuple)
});
};
为了测试这一点,我注释掉了 this.setState 调用并再次尝试,console.log() 将按预期打印更新前的值,因为它不再进入 updateInput 方法。这是有道理的,但是我不确定如何获取更新前的 console.log 值。
【问题讨论】:
-
updateInput可能会改变对象。控制台引用一个对象并反映它收到的任何修改。 -
总结一下; 1. 不要在 updateInput 函数中改变状态和 2. 控制台记录 json 而不是对象:
console.log(JSON.stringify(tableData)) -
我看不到tableData对象的值是什么时候设置的。你不应该写 console.log(this.state.tableData) 吗?
-
@EmileBergeron 那么,将状态对象作为参数传递仍然会修改原始状态吗?我认为它只会修改参数本身而不是原始参数。否则,如果没有 this.setState,我会看到反映的更改,但是,当我将其注释掉时,我看不到状态更新。
标签: javascript reactjs console.log setstate