首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在componentDidMount()中获取时出现问题

在componentDidMount()中获取时出现问题
EN

Stack Overflow用户
提问于 2018-12-20 02:53:31
回答 4查看 1.3K关注 0票数 0

当我尝试console.log时,我的用户列表是未定义的。也许我没拿到什么?

我想从我的api获取我的用户列表(用邮递员测试),并将其放入控制台下一步,我想映射我的用户以在应用程序上显示它

代码语言:javascript
复制
class Test extends Component {
  constructor(props) {
    super(props);
    this.state = {
      users: [],
    }
  }

  componentDidMount() {
    console.log("component did mount");
    fetch("/user/list")
    .then(res => {
      return res.json();
    })
    .then(users => 
      this.setState({users}, () => 
      console.log("list of users => " + users)));
  }

  render() {
    return (
    <div className="form">
      <ul>
        {this.state.users.map((user) =>
          <li key="user._id">{ user.name }</li>
        )}
      </ul>
    </div>
    );
  }
} export default Test;

感谢您的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-20 02:57:56

您正在调用res.json(),而不是从fetch调用的第一个then返回res.json()

我发现这个模式很有帮助:

代码语言:javascript
复制
fetch(url)
   .then(res => res.ok ? res.json() : Promise.reject())

正如您现在的代码一样,users (第二个then中的参数将是未定义的,因为您不会从第一个then返回任何内容

票数 1
EN

Stack Overflow用户

发布于 2018-12-20 02:57:54

您必须返回res.json()才能在下一个.then()中使用它

代码语言:javascript
复制
.then(res => {
    res.json();
})

应该是

代码语言:javascript
复制
.then(res => 
    res.json();
)

或者

代码语言:javascript
复制
.then(res => {
    return res.json();
})

https://javascript.info/promise-chaining

票数 1
EN

Stack Overflow用户

发布于 2018-12-20 03:44:29

您应该将res传递给res.json(),并将结果返回到您所在的状态。

代码语言:javascript
复制
componentDidMount() {
    console.log("component did mount");
    fetch("/user/list")
    .then(res => res.json())
    .then(users => 
      this.setState(users, 
        () => {
            console.log("list of users => " + users)
        })
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53857538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档