J'essaie d'envoyer des données d'un composant enfant à son parent comme suit:
const ParentComponent = React.createClass({
getInitialState() {
return {
language: '',
};
},
handleLanguageCode: function(langValue) {
this.setState({language: langValue});
},
render() {
return (
<div className="col-sm-9" >
<SelectLanguage onSelectLanguage={this.handleLanguage}/>
</div>
);
});
et voici le composant enfant:
export const SelectLanguage = React.createClass({
getInitialState: function(){
return{
selectedCode: '',
selectedLanguage: '',
};
},
handleLangChange: function (e) {
var lang = this.state.selectedLanguage;
var code = this.state.selectedCode;
this.props.onSelectLanguage({selectedLanguage: lang});
this.props.onSelectLanguage({selectedCode: code});
},
render() {
var json = require("json!../languages.json");
var jsonArray = json.languages;
return (
<div >
<DropdownList ref='dropdown'
data={jsonArray}
value={this.state.selectedLanguage}
caseSensitive={false}
minLength={3}
filter='contains'
onChange={this.handleLangChange} />
</div>
);
}
});
Ce dont j'ai besoin, c'est d'obtenir la valeur sélectionnée par utilisateur dans le composant parent. Je reçois cette erreur:
Uncaught TypeError: this.props.onSelectLanguage is not a function
Quelqu'un peut-il m'aider à trouver le problème?
PS Le composant enfant crée une liste déroulante à partir d'un fichier json, et j'ai besoin de la liste déroulante pour afficher les deux éléments du tableau json côte à côte (comme: "aaa, anglais" comme premier choix!)
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
une faute de frappe.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
Mais cela renvoie une erreur:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
lie automatiquement les méthodes sans réaction.Réponses:
Cela devrait fonctionner. Lors de l'envoi de l'accessoire, vous l'envoyez en tant qu'objet, plutôt que de l'envoyer en tant que valeur ou de l'utiliser en tant qu'objet dans le composant parent. Deuxièmement, vous devez formater votre objet json pour qu'il contienne des paires nom-valeur et utiliser
valueField
ettextField
attribuerDropdownList
Réponse courte
Parent:
Enfant:
Détaillé:
ÉDITER:
Étant donné que React.createClass est obsolète à partir de la version 16.0, il est préférable d'aller de l'avant et de créer un composant React en l'étendant
React.Component
. Le passage des données de l'enfant au composant parent avec cette syntaxe ressemblera àParent
Enfant
Utilisation de la
createClass
syntaxe utilisée par l'OP dans sa réponse ParentEnfant
JSON:
la source
this.state.selectedLanguage
semble être toujours nul: / J'utilise DropdownList dereact-widgets
Uncaught ReferenceError: value is not defined
. J'ai fait ce changement:onChange={this.handleLangChange.bind(this, this.value)}
et aucune erreur ne revient, mais il n'affiche toujours pas la valeur sélectionnée :(Pour passer des données du composant enfant au composant parent
Dans le composant parent:
Dans le composant enfant:
la source
this.getData = this.getData.bind(this);
dans le constructeur, car vous pouvez obtenir this.setState n'est pas une fonction si vous voulez manipuler l'état dans getData.J'ai trouvé l'approche comment obtenir des données du composant enfant chez les parents quand j'en ai besoin.
Parent:
Enfant:
Cet exemple montre comment passer la fonction du composant enfant au parent et utiliser cette fonction pour obtenir des données de l'enfant.
la source
Considérant que les composants de la fonction React et l'utilisation des crochets deviennent de plus en plus populaires ces jours-ci, je vais donner un exemple simple de la façon de passer des données de l'enfant au composant parent
dans le composant de fonction parent, nous aurons:
puis
et en passant setChildData (qui font un travail similaire à this.setState dans les composants de classe) à Child
dans le composant enfant, nous obtenons d'abord les accessoires de réception
vous pouvez alors transmettre des données comme si vous utilisiez une fonction de gestionnaire
la source
La méthode React.createClass est obsolète dans la nouvelle version de React, vous pouvez le faire très simplement de la manière suivante, créez un composant fonctionnel et un autre composant de classe pour maintenir l'état:
Parent:
Enfant:
la source
du composant enfant au composant parent comme ci-dessous
composant parent
composant enfant
J'espère que ce travail
la source
dans le
React v16.8+
composant fonction, vous pouvez utiliseruseState()
pour créer un état de fonction qui vous permet de mettre à jour l'état parent, puis de le transmettre à l'enfant en tant qu'attribut d'accessoires, puis à l'intérieur du composant enfant, vous pouvez déclencher la fonction d'état parent, ce qui suit est un extrait de travail :la source
Vous pouvez même éviter que la fonction du parent ne mette à jour l'état directement
Dans le composant parent:
Dans le composant enfant:
la source
L'idée est d'envoyer un rappel à l'enfant qui sera appelé pour restituer les données
Un exemple complet et minimal utilisant des fonctions:
L'application créera un enfant qui calculera un nombre aléatoire et le renverra directement au parent, ce qui donnera
console.log
le résultatla source
Composant parent: -TimeModal
Remarque : - onSelectPouringTimeDiff = {this.handleTimeValue}
Dans le composant enfant, appelez les accessoires si nécessaire
la source