REACT JS:映射要在 JSX 中呈现的对象数组

Posted

技术标签:

【中文标题】REACT JS:映射要在 JSX 中呈现的对象数组【英文标题】:REACT JS: Map over an array of objects to render in JSX 【发布时间】:2017-01-02 04:24:30 【问题描述】:

我是 React JS 的新手问题是我需要在这段代码中显示我数据库中的所有字段。我已经能够在浏览器控制台中以对象的形式获取所有数据,并且能够在浏览器中查看数组中的最后一条数据,但无法查看它们。请原谅我的代码格式错误,因为我是新手。在此先感谢.....

输出和代码

浏览器视图: Land of Toys Inc. 是名称 131 是 ID

JSON 数据:

"posts":[
  "id":"103","name":"Atelier graphique",
  "id":"112","name":"Signal Gift Stores",
  "id":"114","name":"Australian Collectors, Co.",
  "id":"119","name":"La Rochelle Gifts",
  "id":"121","name":"Baane Mini Imports",
  "id":"124","name":"Mini Gifts Distributors Ltd.",
  "id":"125","name":"Havel & Zbyszek Co",
  "id":"128","name":"Blauer See Auto, Co.",
  "id":"129","name":"Mini Wheels Co.",
  "id":"131","name":"Land of Toys Inc."
]

此数据是通过编写为插件的 php 代码获得的,该插件采用 JS 代码中给出的 url 形式

http://localhost/Akshay/REACT/testDataAPI.php?user=2&num=10&format=json

我的代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>React Tutorial</title>
    <!-- Not present in the tutorial. Just for basic styling. -->
    <link rel="stylesheet" href="css/base.css" />
    <script src="https://npmcdn.com/react@15.3.0/dist/react.js"></script>
    <script src="https://npmcdn.com/react-dom@15.3.0/dist/react-dom.js"></script>
    <script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
    <script src="https://npmcdn.com/jquery@3.1.0/dist/jquery.min.js"></script>
    <script src="https://npmcdn.com/remarkable@1.6.2/dist/remarkable.min.js"></script>
  </head>
  <body>
    <div id="content"></div>

    <script type="text/babel">


var UserGist = React.createClass(
  getInitialState: function() 
    return 

      username:[],
      companyID:[]
    ;
  ,

  componentDidMount: function() 
  

    var rows = [];

   this.serverRequest = $.get(this.props.source, function (result) 

      for (var i=0; i < 10; i++) 
      
            var lastGist = result.posts[i];
            //console.log(result.posts[i]);
            this.setState(
            username: lastGist.id,
            companyID: lastGist.name
            );
      

     .bind(this));

  ,

  componentWillUnmount: function() 
    this.serverRequest.abort();
  ,

  render: function() 
            return (
        <li>this.state.companyID is the name this.state.username is the ID</li>
        );

  
);


ReactDOM.render(
  <UserGist source="http://localhost/Akshay/REACT/testDataAPI.php?user=2&num=10&format=json" />,
  document.getElementById('content')
); 

    </script>
  </body>
</html>

【问题讨论】:

【参考方案1】:

使用地图呈现您的数据。并将 json 作为 javascript 对象存储在状态本身而不是两个单独的数组中。

 <!-- Not present in the tutorial. Just for basic styling. -->
    <link rel="stylesheet" href="css/base.css" />
    <script src="https://npmcdn.com/react@15.3.0/dist/react.js"></script>
    <script src="https://npmcdn.com/react-dom@15.3.0/dist/react-dom.js"></script>
    <script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
    <script src="https://npmcdn.com/jquery@3.1.0/dist/jquery.min.js"></script>
    <script src="https://npmcdn.com/remarkable@1.6.2/dist/remarkable.min.js"></script>
    <div id="content"></div>

    <script type="text/babel">


var UserGist = React.createClass(
  getInitialState: function() 
    return 

     data: ["id":"103","name":"Atelier graphique",
  "id":"112","name":"Signal Gift Stores",
  "id":"114","name":"Australian Collectors, Co.",
  "id":"119","name":"La Rochelle Gifts",
  "id":"121","name":"Baane Mini Imports",
  "id":"124","name":"Mini Gifts Distributors Ltd.",
  "id":"125","name":"Havel & Zbyszek Co",
  "id":"128","name":"Blauer See Auto, Co.",
  "id":"129","name":"Mini Wheels Co.",
  "id":"131","name":"Land of Toys Inc."]
    ;
  ,

  componentDidMount: function() 
  

  ,

  componentWillUnmount: function() 
    this.serverRequest.abort();
  ,

  render: function() 
            return (
            <div>
        this.state.data.map(function(item, index)
          return    <li>item.name is the company name, item.id is the ID</li>

        )</div>
        );

  
);


ReactDOM.render(
  <UserGist source="http://localhost/Akshay/REACT/testDataAPI.php?user=2&num=10&format=json" />,
  document.getElementById('content')
); 

    </script>
</html>

JSFIDDLE

对于小提琴示例,我删除了 componentDidMount 中的 $.get() 代码。

附:将状态数组数据创建为对象数组,如 小提琴示例

【讨论】:

我尝试使用 map 来渲染它,但它创建了一个错误,说它是未定义的,这会破坏您的解决方案并回复您,感谢您的帮助 @AkshayVenugopal 什么是未定义的 它可以工作,但我需要像 API 一样使用它,所以我应该如何处理这里的 JSON 数据在代码中给出,我需要从像 phpmyadmin 这样的数据库中使用它 同时弹出警告 "警告:数组或迭代器中的每个子节点都应该有一个唯一的"key" prop。检查UserGist. in li (UserGist 创建) in UserGist 中的渲染方法"【参考方案2】:

我想它会帮助你。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>React Tutorial</title>
    <!-- Not present in the tutorial. Just for basic styling. -->
    <link rel="stylesheet" href="css/base.css" />
    <script src="https://npmcdn.com/react@15.3.0/dist/react.js"></script>
    <script src="https://npmcdn.com/react-dom@15.3.0/dist/react-dom.js"></script>
    <script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
    <script src="https://npmcdn.com/jquery@3.1.0/dist/jquery.min.js"></script>
    <script src="https://npmcdn.com/remarkable@1.6.2/dist/remarkable.min.js"></script>
  </head>
  <body>
    <div id="content"></div>

    <script type="text/babel">


var UserGist = React.createClass(
  getInitialState: function() 
    return 

      username:[],
      companyID:[]
    ;
  ,

  componentDidMount: function() 
  

    var rows = [];

   this.serverRequest = $.get(this.props.source, function (result) 
      var username = [];
      var companyID = [];
      for (var i=0; i < 10; i++) 
      
            var lastGist = result.posts[i];
            //console.log(result.posts[i]);
            username.push(lastGist.id);
            companyID.push(lastGist.name);
      
      this.setState(
            username: username,
            companyID: companyID,
      );
     .bind(this));

  ,

  componentWillUnmount: function() 
    this.serverRequest.abort();
  ,

  render: function() 
      return (
        <div>
    this.state.companyID.map(function(item, index)
      return    <li>item is the company name,              this.state.username[index] is the ID</li>
    )</div>
        );

  
);


ReactDOM.render(
  <UserGist source="http://localhost/Akshay/REACT/testDataAPI.php?user=2&num=10&format=json" />,
  document.getElementById('content')
); 

    </script>
  </body>
</html>

【讨论】:

TypeError: 这是未定义的 singleList() render() browser.min.js%20line%203%20%3E%20Function:52 [36]() react.js: 6614 [36]() react.js:6641 [36]() 你能描述一下错误吗?行号:???让我看看。 不看。我已经编辑过了。希望它会起作用。

以上是关于REACT JS:映射要在 JSX 中呈现的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

React——JSX

存储在动态对象中的 JSX 映射数组 (Next.js)

React 如何在嵌套数据对象中渲染动态图像

Node.js 之react.js组件-JSX简介

如何使用 React.js 在 JSX 中循环对象

react的jsx语法