将本地文件中的json数据加载到React JS中

我有一个React组件,我想从文件中加载JSON数据。即使我将变量数据创建为全局变量,控制台日志当前也不起作用

'use strict';

var React = require('react/addons');

// load in JSON data from file
var data;

var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open("get", "data.json", true);
oReq.send();

function reqListener(e) {
    data = JSON.parse(this.responseText);
}
console.log(data);

var List = React.createClass({
  getInitialState: function() {
    return {data: this.props.data};    
  },
  render: function() {
    var listItems = this.state.data.map(function(item) {
        var eachItem = item.works.work;        

        var photo = eachItem.map(function(url) {
            return (
                <td>{url.urls}</td> 
            )
        });
    });
    return <ul>{listItems}</ul>
  }
});

var redBubble = React.createClass({
    render: function() {
      return (
        <div>
          <List data={data}/>          
        </div>
      );
    }
  });

module.exports = redBubble;

理想情况下,我希望这样做,但它不起作用-它试图在文件名的末尾添加“ .js”

var data = require('./data.json');

最好的方式,最好是“反应”方式的任何建议,将不胜感激!

Tom老丝2020/03/18 15:45:49

My JSON file name: terrifcalculatordata.json

[
    {
      "id": 1,
      "name": "Vigo",
      "picture": "./static/images/vigo.png",
      "charges": "PKR 100 per excess km"
    },
    {
      "id": 2,
      "name": "Mercedes",
      "picture": "./static/images/Marcedes.jpg",
      "charges": "PKR 200 per excess km"
    },
    {
        "id": 3,
        "name": "Lexus",
        "picture": "./static/images/Lexus.jpg",
        "charges": "PKR 150 per excess km"
      }
]

1st Import on top:

import calculatorData from "../static/data/terrifcalculatordata.json";

then after return:

                  <div>
                      {
                        calculatorData.map((calculatedata, index) => {
                          return(
                          <div key={index}> 
                            <img
                            src={calculatedata.picture}
                            class="d-block"
                            height="170"
                          />
                          <p>
                            {calculatedata.charges}
                          </p>
                     </div>

LEYHarryHarry2020/03/18 15:45:49

您可以使用webpack配置将JSON文件添加为外部文件。然后,您可以在任何react模块中加载该json。

看看这个答案

西里达蒙2020/03/18 15:45:49

您正在打开一个异步连接,但是您已经编写了代码,就像它是同步的一样。reqListener回调函数将不会与你的代码同步执行(即前React.createClass),但你的整个段已运行后,才和响应已经从远程位置接收。

除非您使用零延迟量子纠缠连接,否则在您运行所有语句之后很好了例如,要记录接收到的数据,您将:

function reqListener(e) {
    data = JSON.parse(this.responseText);
    console.log(data);
}

我没有data在React组件中看到使用,因此我只能从理论上提出建议:为什么不在回调中更新您的组件?