ค้นหาเว็บไซต์

javascript - นำเข้าไฟล์ JSON ใน React


ฉันเป็นคนใหม่กับ React และฉันกำลังพยายามนำเข้าตัวแปร JSON DATA จากไฟล์ภายนอก ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

ไม่สามารถหามอดูล "./customData.json" ได้

มีใครช่วยฉันได้ไหม? มันทำงานได้ถ้าฉันมีตัวแปร DATA ใน index.js แต่ไม่ทำงานเมื่ออยู่ในไฟล์ JSON ภายนอก.

import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import customData from './customData.json';
import Profile from './components/profile';
import Hobbies from './components/hobbies';

class App extends Component {
  render() {
    return (
      <div>
        <Profile name={this.props.profileData.name}imgUrl={this.props.profileData.imgURL} />
        <Hobbies hobbyList={this.props.profileData.hobbyList}/>
      </div>
    );
  }
}

ReactDOM.render(<App profileData={DATA}/>, document.querySelector('.container'));
import React, {Component} from 'react';

var Hobbies = React.createClass({
  render: function(){
    var hobbies = this.props.hobbyList.map(function(hobby, index){
        return (<li key={index}>{hobby}</li>);
    });
    return (
        <div>
            <h5>My hobbies:</h5>
            <ul>
                {hobbies}
            </ul>
        </div>
    );
  } 
});

export default Hobbies;
import React from 'react';

var Profile = React.createClass({
render: function(){
    return (
        <div>
            <h3>{this.props.name}</h3>
            <img src={this.props.imgUrl} />
        </div>
    )
  }
});

export default Profile
var DATA = {    
    name: 'John Smith',
    imgURL: 'http://lorempixel.com/100/100/',
    hobbyList: ['coding', 'writing', 'skiing']
}

export default DATA

คำตอบ #1

วิธีที่ดีในการทำสิ่งนี้คือการใช้โมดูล json-loader ด้วยวิธีนี้คุณไม่จำเป็นต้องเพิ่มนามสกุล .js ปลอม (ซึ่งตั้งใจไว้สำหรับโค้ดมากกว่าข้อมูล/การตั้งค่า) โมดูลนี้ได้ถูกรวมอยู่ใน create-react-app และ Webpack 2.x+ (เวอร์ชันปัจจุบันคือ 5.x) ดังนั้นหากคุณใช้เครื่องมือเหล่านี้ คุณสามารถนำเข้าไฟล์ json ของคุณได้อย่างง่ายดายโดยไม่ต้องมีการตั้งค่า/การพึ่งพาเพิ่มเติม:

import Profile from './components/profile';

ดูคำตอบนี้สำหรับรายละเอียดเพิ่มเติม

คำตอบ #2

เรื่องเก่าๆ นี้...

กล่าวโดยสรุป คุณควรใช้ require และปล่อยให้ Node จัดการการแยกวิเคราะห์เป็นส่วนหนึ่งของการเรียกใช้ require แทนการส่งงานนั้นไปให้โมดูลของบุคคลที่สาม คุณยังควรระมัดระวังให้การตั้งค่าของคุณแน่นหนา ซึ่งหมายความว่าคุณควรตรวจสอบข้อมูลที่ส่งกลับมาอย่างละเอียด

แต่เพื่อความกระชับ พิจารณาตัวอย่างต่อไปนี้:

ตัวอย่างเช่น สมมติว่าฉันมีไฟล์คอนฟิกชื่อ 'admins.json' อยู่ในรูทของแอปของฉันซึ่งมีเนื้อหาดังต่อไปนี้:

[{
  "userName": "tech1337",
  "passSalted": "xxxxxxxxxxxx"
}]

สังเกตคีย์ที่มีเครื่องหมายอัญประกาศ, "userName", "passSalted"!

ฉันสามารถทำสิ่งต่อไปนี้และดึงข้อมูลออกจากไฟล์ได้อย่างง่ายดาย

let admins = require('~/app/admins.json');
console.log(admins[0].userName);

ตอนนี้ข้อมูลอยู่ในระบบแล้วและสามารถใช้งานเป็นวัตถุปกติ (หรืออาเรย์ของวัตถุ) ได้

คำตอบ #3

React 17 ที่สร้างจาก create-react-app การนำเข้า json จะใช้งานได้โดยค่าเริ่มต้น

import config from './config.json'

คำตอบ #4

เมื่อมีการติดตั้ง json-loader คุณสามารถใช้

import customData from '../customData.json';

หรือง่ายกว่านั้นอีก

import customData from '../customData';

เพื่อติดตั้ง json-loader

npm install --save-dev json-loader

คำตอบ #5

วิธีที่ง่ายที่สุดคือดังต่อไปนี้

// Save this as someJson.js
const someJson = {
  name: 'Name',
  age: 20
}

export default someJson

แล้ว

import someJson from './someJson'

คำตอบ #6

วิธีแก้ปัญหาที่ใช้ได้ผลสำหรับฉันคือ:- ฉันย้ายไฟล์ data.json ของฉันจากโฟลเดอร์ src ไปที่โฟลเดอร์ public จากนั้นใช้ fetch API เพื่อดึงไฟล์นั้น

fetch('./data.json').then(response => {
      console.log(response);
      return response.json();
    }).then(data => {
      // Work with JSON data here
      console.log(data);
    }).catch(err => {
      // Do something for an error here
      console.log("Error Reading data " + err);
    });

ปัญหาคือว่า หลังจากการคอมไพล์แอป React คำขอ fetch จะไปหไฟล์ที่ URL "http://localhost:3000/data.json" ซึ่งจริงๆ แล้วเป็นไดเรกทอรี public ของแอป React ของฉัน แต่โชคร้ายที่ระหว่างการคอมไพล์แอป React ไฟล์ data.json จะไม่ถูกย้ายจาก src ไปยังไดเรกทอรี public ดังนั้นเราจำเป็นต้องย้ายไฟล์ data.json จาก src ไปยังไดเรกทอรี public ด้วยตัวเอง

คำตอบ #7

โปรดจัดเก็บไฟล์ JSON ของคุณด้วยนามสกุล .js และตรวจสอบให้แน่ใจว่า JSON ของคุณอยู่ในไดเรกทอรีเดียวกัน

คำตอบ #8

ในเวอร์ชัน React ปัจจุบัน คุณเพียงแค่อิมพอร์ตและใช้งาน:

import jsonData from 'path/to/myJson.json'

บทความที่เกี่ยวข้อง