尽管html中的state.result是不同且正确的事实,但为什么控制台中的“初始结果”和“最终结果”相同?我说错了吗? 我想输入一个可以在输入时更新结果的文本输入。另外,当您删除带有退格键的字母时,它不会更新。
我在控制台中打印了这些值,但这是因为这些值是过去的值,而不是当前的值。
const diaryDefaultState = {
loading: false,
uploadModalVisible: false,
monthModalVisible: false,
editModalVisible: false,
entryUploading: false,
deleteEntryDisabled: false,
entries: []
};
export default (state = diaryDefaultState, action) => {
switch (action.type) {
case 'ENTRIES_LOADING':
return {
...state,
loading: true
};
[..others, don't think these are important for storage, just use during run?..]
答案 0 :(得分:1)
因为setState处于异步状态。 最终结果控制台日志发生在实际设置状态之前。
(此外,当实际更改发生时,组件会重新渲染,这就是为什么您在html中看到正确值但控制台日志已经发生的原因。)
来自文档
setState()不会立即使this.state突变,而是创建一个挂起的状态转换。调用此方法后访问this.state可能会返回现有值。无法保证对setState调用的同步操作,并且可能会批量调用以提高性能。
更改后,您可以传递回调以检查值
this.setState({ key: value }, function () {
console.log(this.state.key)
})
答案 1 :(得分:0)
使用setState()时,将调用异步函数,并且异步函数不会立即响应。这需要时间。如果需要在setstate()之后检查状态,则应使用
this.setState({result: this.state.result,()=>console.log(this.state.result))
此外,状态更新时,您的组件及其子组件也会重新呈现。因此,您可以在渲染函数中读取更新的状态。