【问题标题】:setting state after calling api in react在反应中调用api后设置状态
【发布时间】:2019-08-09 20:15:17
【问题描述】:

我尝试了多种设置状态的方法,但由于某种原因,状态永远不会更新。这是我希望状态更改为的 JSON 数据

export class Provider extends Component {
  state = {
    posts: [],
    profileinfo: {},
    dispatch: action => this.setState(state => reducer(state, action))
  };

  componentDidMount() {
    fetch("http://localhost:3001/login").then(response =>
      response
        .json()
        .then(data => this.setState({ profileinfo: data.firstname }))
    );
    console.log(this.state.profileinfo);
  }

  render() {
    // ...
  }
}

【问题讨论】:

  • 请以文本格式包含数据,而不是图像。
  • 您必须将您的 componentDidMount() 设置为比较旧状态/道具与新状态/道具的条件。那么你将避免无限循环
  • 承诺得到解决?
  • 不,它没有得到解决

标签: reactjs express axios


【解决方案1】:

setState 是异步的。您的控制台日志可能在状态更新之前触发。如果您想在setState 调用后查看结果,请按以下方式操作:

data => this.setState({ profileinfo: data.firstname }, () => {
  console.log(this.state);
});

【讨论】:

  • 配置文件信息仍然没有得到更新,因为配置文件信息存储在上下文 api 中,我正在尝试获取它的值
  • 那么实际上,您的 fetch 不起作用并且您没有获取数据?
  • 如果您的个人资料信息存储在上下文中,则您不会获取它的价值。您使用上下文 ProviderConsumer 来访问这些值。在此处阅读:reactjs.org/docs/context.html 和此处:stackoverflow.com/a/49870973/6036881
  • 是的,我需要设置状态,以便我可以从另一个组件访问值。截至目前,当我尝试打印值时它返回 undefined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2021-05-28
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多