【问题标题】:REACT JS: Map over an array of objects to render in JSXREACT JS:映射要在 JSX 中呈现的对象数组
【发布时间】:2016-08-25 16:24:29
【问题描述】:

我是 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>

【问题讨论】:

    标签: javascript php jquery json reactjs


    【解决方案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]()
    • 你能给出错误的描述吗?行号:???让我看看。
    • 不看。我已经编辑过了。希望它会起作用。
    猜你喜欢
    • 2021-04-27
    • 2020-09-25
    • 1970-01-01
    • 2020-03-10
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2021-09-04
    相关资源
    最近更新 更多