我有一个组件,其中有一个带有某些属性的状态。构造函数如下所示:
% ghci -XNoImplicitPrelude -XOverloadedStrings
GHCi, version 8.4.4: http://www.haskell.org/ghc/ :? for help
> import Data.Char
Data.Char> import Protolude
Data.Char Protolude> any isUpper . take 1 . strConv Strict $ ("Yes" :: Text)
True
说我想更新constructor (props, context) {
super(props, context)
this.state = {
property1: '',
property2: '',
property3: '',
}
}
,通常是这样的:
property1
但是,这不起作用,this.setState({property1: 'my new property1'})
的值不会改变。为了让我更新任何状态,我必须执行以下操作:
property1
我知道一个事实,以前的方法可以正常工作。有什么改变吗?是否有某些情况我不能简单地设置每个状态属性?
答案 0 :(得分:5)
setState异步工作。如果您调用setState然后立即检查该值,则该值尚未更新。
this.setState({property1: 'my new property1'});
console.log(this.state.property1); //old value
如果要等待新值,可以在setState中使用回调参数
this.setState({property1: 'my new property1'}, () => {
console.log(this.state.property1);
});
使用整个对象时看到状态更新的原因是因为您正在通过编辑状态来对其进行突变,这很糟糕。