【问题标题】:how to map through json object in javascript?如何通过javascript中的json对象映射?
【发布时间】:2018-09-28 07:32:32
【问题描述】:

我想通过 JSON 对象的每个属性映射(循环)。 JSON 看起来像这样

[
  {
    "_id": "5ad5c0ccdec0fa2b3c1f1ba0",
    "name": "optioin",
    "job": "google",
    "location": "usa",
    "gender": "male",
    "__v": 0
  },
  {
    "_id": "5ad6043f9fba4125b467c6af",
    "name": "reactjs",
    "job": "facebook",
    "location": "california",
    "gender": "male",
    "__v": 0
  }
]

我希望将此 JSON 分配给我的 reactjs 状态 我的组件看起来像这样

  componentDidMount() {
      fetch('/api/get/all').then((res)=>{
        return res.json();
      }).then(users =>{
          this.setState({
            user: users
          })
      });
      console.log(this.state.user);
  }

我已将我的用户状态初始化为

this.state={user:[]};

API 正在像这样从节点服务器响应

app.get('/api/get/all',(req,res)=>{
    User.find({},(err,data) => {
      // res.json("inside this");
      if (err) {
        // console.error(err);
        res.json({
          message:"error"
        });
      }
      // console.log(data.toArray);

      res.json(data);
 });
});

我想获取每个 JSON 对象的每个值 我的映射函数

<div className="row">

                {this.state.user.map(u =>{
                    <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />
                })}



            </div>

我得到的错误是

this.state.user.map is not a function

console.log(this.state.user) 的结果

(2) [{…}, {…}]0:{_id:“5ad5c0ccdec0fa2b3c1f1ba0”,名称:“optioin”,工作:“pubg”,位置:“美国”,性别:“男性”,...} 1:{_id:“5ad6043f9fba4125b467c6af”,名称:“reactjs”,工作:“facebook”,位置:“加利福尼亚”,性别:“男性”,......}长度:2__proto__:数组(0)

提前致谢

【问题讨论】:

  • 您的 componentDidMount 方法中似乎有错字。也许你想做user: users 而不是user: u
  • this.setState({ user: u }) 可能你想用this.setState({ user: users })
  • 是的,有一个拼写错误,但我用users 也做到了......仍然没有希望

标签: javascript json reactjs


【解决方案1】:

您没有正确设置状态以响应您的 API 调用,您需要编写 this.setState({user: users}) 而不是 this.setState({user: u})

componentDidMount() {
      fetch('/api/get/all').then((res)=>{
        return res.json();
      }).then(users =>{
          this.setState({
            user: users
          })
      });
      // console.log(this.state.user);  <-- This won't show update state since setState is asynchronous
  }

注意: 您可以查看此答案以了解有关setState being asynchronous 的更多详细信息

【讨论】:

  • res =&gt; res.json 写得更冗长有什么原因吗?
  • @sabithpocker,你建议的方式是(res)=&gt;{ return res.json(); }的另一种写法,你可以选择你觉得最好的,没有性能差异,你可以检查stackoverflow.com/questions/49425755/…
  • @Shubham 我在这个问题中更改了这是拼写错误,但在我的代码中我将其更改为用户但仍然是相同的错误
  • @AnikethSaha,你能检查一下Array,isArray(users)是否在成功函数中给出了true
  • @ShubhamKhatri 它返回 true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2020-04-12
  • 2020-10-24
  • 2012-02-06
  • 2014-08-05
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多