当前位置: 首页 > 知识库问答 >
问题:

设置状态后反应状态未定义?[副本]

诸葛亮
2023-03-14

我有一个处理程序,在输入字段发生变化时触发。但是,当我将状态日志记录到控制台resData是'未定义'?这是不可能的,因为console.log(身体)确实返回结果。

handlePersonNameChange(event) {
var resData
request('https://swapi.co/api/people/?search='+event.target.value, function (error,response,body) {
  console.log(body)
  resData = body
})
this.setState({personData: resData});
console.log(this.state)
}

共有3个答案

濮翰学
2023-03-14
this.setState({ state : "new1" })

此方法不同步,因此当您记录状态时,它尚未更新。

您应该将其登录到componentWillUpdate生命周期方法中。

丌官子安
2023-03-14

需要在请求回调里面setState,例如:

request('https://swapi.co/api/people/?search='+event.target.value, function (error,response,body) {
  console.log(body)
  resData = body
  this.setState({personData: resData});
})

因为在您的示例中执行setState时,您的请求没有得到解决。

金兴朝
2023-03-14

请求调用是异步的,您应该将this.setState放在响应体中。

另外,this.setState是异步的,要查看结果,应该使用回调函数。此函数在设置新状态后调用

handlePersonNameChange(event) {
  var resData
  request('https://swapi.co/api/people/?search='+event.target.value, 
  function (error,response,body) {
    console.log(body)
    resData = body
    this.setState({personData: resData}, function() {
      console.log(this.state)
    })
  })
}

有关this.setState()的更多信息,请参见此处

 类似资料:
  • 我是React的新手,你能告诉我这是什么意思吗?

  • 我知道这是一个具有约束力的问题,但我不确定在哪里绑定它。我尝试了一些不同的方法。 问题发生在应用程序上。\u当用户更改下拉框时选择。我希望它更新状态,以强制日历组件重新加载。 应用程序 选择器

  • 问题内容: 在这里,我尝试设置为’hello’,然后打印它,但是状态似乎为空。当我刚刚使用更新状态时怎么办?设置为全局变量。 问题答案: 从reactjs文档中: 不会立即变异,但会创建待处理的状态转换。调用此方法后进行访问可能会返回现有值。 https://facebook.github.io/react/docs/component- api.html 您可以做的是将状态更新后传递给回调函数:

  • 我是新来的,你能告诉我这是什么意思吗? 我知道语法条件?cond_true: cond: false,但我不知道

  • 注:在 Status.Code 中通过枚举的方式定义状态码,这些状态码的定义非常的有参考和借鉴价值,因此详细翻译了一遍。 定义和注释 OK(0):成功 操作成功完成 CANCELLED(1):被取消 操作被取消(通常是被调用者取消) UNKNOWN(2):未知 未知错误。这个错误可能被返回的一个例子是,如果从其他地址空间接收到的状态值属于在当前地址空间不知道的错误空间(注:看不懂。。。)。此外,A

  • 我试图在promise的内设置状态,但状态值未保存,在then()外无法访问。 以下是更新后的代码: 如果我我得到一个值。但是,如果我console.log在那么()块,我得到正确的值。在这种情况下如何设置状态? 更新的说明: 为了给整个逻辑提供更好的上下文:我使用了一个GooglePlacesAutoComplete组件,它允许用户从下拉列表中选择一个位置。当用户从下拉列表中选择位置时,将调用上