Je suis nouveau sur React et j'essaie d'importer une variable JSON DATA
à partir d'un fichier externe. Je reçois l'erreur suivante:
Impossible de trouver le module "./customData.json"
Quelqu'un pourrait-il m'aider? Cela fonctionne si ma variable DATA
est dans index.js
mais pas si elle se trouve dans un fichier JSON externe.
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
Un bon moyen (sans ajouter une fausse extension .js qui est pour le code, pas pour les données et les configurations) est d’utiliser le module json-loader
. Si vous avez utilisé create-react-app
pour échafauder votre projet, le module est déjà inclus, il vous suffit d'importer votre json:
import Profile from './components/profile';
Cette réponse en explique plus.
Cette vieille châtaigne ...
En bref, vous devez utiliser require et laisser le noeud gérer l'analyse dans le cadre de l'appel requis, sans l'externaliser à un module tiers. Vous devez également veiller à ce que vos configurations soient à l'épreuve des balles, ce qui signifie que vous devriez vérifier les données renvoyées avec soin.
Mais par souci de brièveté, considérons l'exemple suivant:
Par exemple, supposons que j'ai un fichier de configuration 'admins.json' à la racine de mon application contenant les éléments suivants:
[{
// Note the quoted keys, "userName", "passSalted"!
"userName":"tech1337",
"passSalted":"xxxxxxxxxxxx"
}]
Je peux faire ce qui suit et extraire facilement les données du fichier.
let admins = require('~/app/admins.json');
console.log(admins[0].userName);
Maintenant, les données sont dans et peuvent être utilisées comme un objet standard (ou un tableau d'objets).
Veuillez stocker votre fichier JSON avec l’extension .js et assurez-vous que votre JSON doit se trouver dans le même répertoire.
essayez avec export default DATA
ou module.exports = DATA
Avec json-loader
installé, vous pouvez utiliser
import customData from '../customData.json';
ou aussi, encore plus simplement
import customData from '../customData';
Pour installer json-loader
npm install --save-dev json-loader
La solution qui a fonctionné pour moi est la suivante: - J'ai déplacé mon fichier data.json de src vers le répertoire public . J'ai ensuite utilisé l'API d'extraction pour extraire le fichier.
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);
});
Le problème était qu’après la compilation de l’application Réaction, la demande d’extraction cherchait le fichier à l’adresse " http: // localhost: 3000/data.json ", qui est en fait le répertoire public de mon application Réactif. Mais malheureusement, lors de la compilation, le fichier data.json de l'application n'est pas déplacé de src vers un répertoire public. Nous devons donc explicitement déplacer le fichier data.json de src vers le répertoire public.
// renommer le fichier .json en .js et le conserver dans le dossier src
Déclarer l'objet json en tant que variable
var customData = {
"key":"value"
};
Exportez-le en utilisant module.exports
module.exports = customData;
À partir du composant qui en a besoin, assurez-vous de sauvegarder deux dossiers en profondeur.
import customData from '../customData';