Reactjs 无法在组件中设置状态

Reactjs 无法在组件中设置状态,reactjs,Reactjs,单击事件发生时,状态未设置为组件内给定的值。它仍然显示初始状态,控制台记录旧状态,即“hello” var CompOne=React.createClass({ getInitialState:函数(){ 返回{ 编辑:“你好” } }, editme:function(){ 这是我的国家({ 编辑:“那里” }) console.log(this.state.edit) }, render:function(){ 返回( {this.props.name} 编辑 ) } }) var Pr

单击事件发生时,状态未设置为组件内给定的值。它仍然显示初始状态,控制台记录旧状态,即“hello”

var CompOne=React.createClass({
getInitialState:函数(){
返回{
编辑:“你好”
} 
},
editme:function(){
这是我的国家({
编辑:“那里”
})
console.log(this.state.edit)
},
render:function(){
返回(
{this.props.name}
编辑
)
}
})
var Pri=React.createClass({
渲染:函数(){
返回(
功能
设置状态
不同步。这里是一个关于这一点的注释

setState()
不会立即改变此.state,但会创建一个 等待状态转换。调用此函数后访问此.state 方法可能返回现有值。没有 保证对
setState
的调用和调用的同步操作 为了提高性能,可能会进行批处理

用人类的术语来说,这意味着如果调用
setState
并尝试立即读取状态,状态可能会改变,也可能是相同的

您可以使用的解决方案是将回调作为第二个参数传递给
setState
方法:

editme: function () {
   this.setState({
     edit: "there"
   }, function(){
       // this function would be invoked only when the state is changed
       console.log(this.state.edit);
   });
}
第二个参数的用途在同一文档文章中描述:

第二个参数是一个可选的回调函数,它将 一旦
setState
完成且组件已安装,则执行一次 重新渲染


您需要在
setState
中使用回调函数,因为setState需要时间进行变异,并且在语句异步执行时,会在状态变异之前执行
console.log

   editme: function () {
       this.setState({
         edit: "there"
       }, function(){

       console.log(this.state.edit) 
       }) 
     },
var CompOne=React.createClass({
getInitialState:函数(){
返回{
编辑:“你好”
} 
},
editme:function(){
这是我的国家({
编辑:“那里”
},函数(){
console.log(this.state.edit)
}) 
},
render:function(){
返回(
{this.props.name}
编辑
)
}
})
var Pri=React.createClass({
渲染:函数(){
返回(


   editme: function () {
       this.setState({
         edit: "there"
       }, function(){

       console.log(this.state.edit) 
       }) 
     },