Créer une instance d'une Réagir la classe à partir d'une chaîne
J'ai une chaîne de caractères qui contient le nom de la Classe (ce qui est à venir à partir d'un fichier json). Cette chaîne raconte ma Classe de Modèle de mise en page /modèle à utiliser pour les données (également en json). La question est de ma mise en page ne s'affiche pas.
La maison.jsx:
//a template or layout.
var Home = React.createClass({
render () {
return (
<div>Home layout</div>
)
}
});
Modèle.jsx:
var Template = React.createClass({
render: function() {
var Tag = this.props.template; //this is the name of the class eg. 'Home'
return (
<Tag />
);
}
});
Je n'ai pas les erreurs mais je ne vois pas la mise en page /la Maison de la Classe. J'ai vérifié les accessoires.modèle et cette des journaux de la bonne info. Aussi, je peux voir la maison de l'élément dans le DOM. Toutefois, il ressemble à ceci:
<div id='template-holder>
<home></home>
</div>
Si je change de ligne suivante:
var Tag = Home;
//this works but it's not dynamic!
Toutes les idées, comment je peux résoudre ce problème? Je suis sûr que c'est simple de fixer ou je suis en train de faire quelque chose de stupide. De l'aide serait appréciée. Toutes mes excuses si cela a déjà été posée (je n'arrivais pas à le trouver).
Grâce,
Ewan
OriginalL'auteur ewan | 2015-05-11
Vous devez vous connecter pour publier un commentaire.
Cela ne fonctionnera pas:
Cependant, cette volonté:
Donc vous avez simplement besoin de trouver un moyen de la carte entre la chaîne
"Home"
et la classe de composantHome
. Un objet simple et fonctionne comme une base de registre, et vous pouvez construire à partir de là si vous avez besoin de plus de fonctionnalités.Vous pourriez construire une sorte de registre mondial et enregistrer chaque composant lorsque celui-ci est créé avec
React.createClass
(par exemple, en l'enveloppant dans un appel de fonction ou de quelque chose), mais vous aurez certainement besoin d'obtenir des références pour les composants réels.OriginalL'auteur Michelle Tilley
Si vous pouvez vivre avec tous vos composants dans un seul module, alors cela fonctionne sans avoir à le connecter manuellement vos classes à un dictionnaire:
Le générique instruction d'importation est déjà un dictionnaire et le code fonctionne comme le registre dans la réponse précédente.
En fait, je pense que vous pouvez travailler avec plusieurs modules avec une autre cartographie:
Je serais tout à fait faire cela. En fait, je pense que je suis.
OriginalL'auteur Robert Moskal
J'ai eu le même problème et trouvé la solution par moi-même. Je ne sais pas si c'est la "meilleure pratique", mais il fonctionne et je l'utilise actuellement dans ma solution.
Vous pouvez simplement utiliser le "mal" fonction eval pour créer dynamiquement une instance de réagir composant. Quelque chose comme:
Ensuite, il suffit d'appeler l'endroit où vous voulez:
Si elle répond à vos besoins, vous pouvez peut-être envisager quelque chose comme ça.
Espère que cela aide.
eval
du mal, à moins que l'utilisateur peut saisir ce qu'ils veulent.OriginalL'auteur dgpedro
Lorsque vous utilisez JSX vous pouvez soit rendre les balises HTML (chaînes de caractères) ou de Réagir à des composants (classes).
Lorsque vous faites var Tag = à la Maison, il fonctionne parce que le JSX compilateur transforme:
avec la variable de la Balise dans le même champ d'application et d'être Réagir la classe.
Lorsque vous ne
vous faites
Mais "aClassName" n'est pas une balise HTML.
Look ici
OriginalL'auteur gabrielgiussi
Je voulais savoir comment faire pour créer Réagir classes dynamiquement à partir d'une spécification JSON chargé à partir d'une base de données et j'ai donc fait quelques tests et tout compris. Mon idée de base était que je voulais définir une Réagir application par le biais d'une interface graphique au lieu de taper le code dans un éditeur de texte.
Cela est compatible avec Réagissent 16.3.2. Note
React.createClass
a été déplacée dans son propre module.Voici une version condensée des parties essentielles:
Vous pouvez voir un exemple plus complet ici:
https://github.com/brennancheung/02-dynamic-react/blob/master/src/commands/tests/createClass.test.js
OriginalL'auteur Brennan Cheung