Comment obtenir les références d'un autre composant de Réagir JS
Le code dans l'Application principale composante est comme suit :
class App extends Component {
componentDidMount(){
console.log(this.ref);
debugger;
}
render() {
return (
<div>
<Header/>
{this.props.children}
<Footer/>
</div>
);
}
}
Et un des éléments qui rend avec {this.props.children}
est en page d'Accueil, où sont les articles avec des refs.
Le code d'une page d'Accueil se présente comme suit :
render(){
return (
<div className="homeMain">
<section ref="info"> <Info/> </section>
<section ref="contact"> <Contact /> </section>
</div>
);
}
Comment puis-je obtenir ces refs à l'intérieur de l'App composant pour être en mesure de les passer comme des accessoires à-tête?
Je suis en train de le faire à l'intérieur de componentDidMount en Application de la composante, mais console.log(this.refs)
est vide.
Des conseils?
MODIFIER
L'ensemble de l'Application de la composante :
import React, {Component} from 'react';
import Footer from './common/footer';
import Header from './common/header';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import * as actions from './components/homepage/login/authActions';
class App extends Component {
componentDidMount(){
console.log(this.props.children.refs);
debugger;
}
render() {
return (
<div>
<Header route={this.props.location.pathname}
language={this.props.language.labels}
authenticated={this.props.authenticated}
signoutAction={this.props.actions}
offsets={this.props.offsets}
/>
{React.cloneElement(this.props.children, {
currentLanguage: this.props.language.labels,
authenticated: this.props.authenticated
})}
<div className="clearfix"/>
<Footer currentLanguage={this.props.language.labels}/>
</div>
);
}
}
function mapStateToProps(state, ownProps) {
return {
language: state.language,
authenticated: state.auth.authenticated,
offsets: state.offsets
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(actions, dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
this.refs
montrera tous les refs de actuelle composant et que vous n'avez pas défini de toutes les refs.Mais qu'elles sont définies à l'un des composants enfants. Comment puis-je les obtenir?
tu veux dire passer refs d'un enfant à un parent via des accessoires? vers le haut?
Vous ne pouvez pas et vous ne devriez pas. Pouvez-vous nous dire exactement ce que vous essayez d'atteindre?
Si vous voulez faire quelque chose comme cela, je pense que vous devriez définir une méthode sur les enfants de la composante et l'appel à la méthode du parent via refs, un autre moyen pourrait être la mise en œuvre d'un événement de l'émetteur
OriginalL'auteur Boky | 2016-10-17
Vous devez vous connecter pour publier un commentaire.
La Réagir, l'idée principale est de passage des accessoires à la baisse des parents aux enfants (même à des niveaux plus profonds des enfants - petits-enfants, je veux dire)
Par conséquent, lorsque nous voulons le parent à faire quelque chose qui est déclenchée à partir de (ou appartient à) les enfants, nous pouvons créer une fonction de rappel dans le parent, puis le transmettre à nos enfants que les accessoires
Pour votre choix, c'est une démonstration sur la façon de passer des fonctions de rappel vers le bas à travers de nombreux niveaux, des enfants et comment les déclencher:
La Force de Réagir conteneur pour actualiser les données
Ré-initialisation de la classe sur les rediriger
Dans votre cas, vous pouvez accéder à des références auprès d'enfants de composants, comme suit: (en utilisant la chaîne de ref - comme vous l'avez dit)
Composant Parent:
Composant Enfant:
OriginalL'auteur thinhvo0108
ref
est la propriété de chaquethis.props.children
d'où vous pouvez accéder à la ref du composant enfant dans le parent viaref
bien surthis.props.children
Assurez-vous que vous avez accès ref après
componentDidMount
Edit :
Essayer ci-dessous de code si cela fonctionne :
componentDidMount(){ console.log(this.props.children.ref) }
renvoie la valeur null.assurez-vous que cette.accessoires de jeu.les enfants existe
Il existe, le contenu de la page d'Accueil est affiché.
Essayez jeu de code si cela fonctionne ..
Le même problème.
OriginalL'auteur KOTIOS
Selon Les références aux Composants, basée sur une chaîne
ref
s -- alors que pas obsolète - sont remplacées par le rappel de base de la syntaxe, par exemple:La chaîne
ref
est susceptible d'être obsolète rapidement, ce qui implique aussi quethis.refs
. En tant que tel, je vous recommande de les prendre en compte, et de fournir des méthodes d'instance ou propriétés pour exposer les refs de la place:Après cela, vous aurez besoin d'obtenir un
ref
àHomePage
ainsi, sur lequel vous pouvez ensuite accéder àinfoSection
etcontactSection
en tant que propriétés, que vous pouvez ensuite passer comme des accessoires deHeader
, par exemple:Votre application exacte de la structure est inconnu pour moi, mais le principe général valable partout: exposer
ref
s par exemple des méthodes ou des propriétés, obtenir unref
à la composante de l'exposer sesref
s, puis accéder à l'intérieurref
s par l'exposé des propriétés.Modifier
Si vous souhaitez garder l'aide de la chaîne à base de
ref
s pour l'instant au lieu de cela, vous pouvez définir un getter (bien querefs
devraient être directement accessibles):Vous pouvez définir des accesseurs. Je vais modifier cela dans la question.
OriginalL'auteur John Weisz
Si votre composant sont liées (parent et enfant ), vous pouvez affecter ref de l'enfant et de l'utiliser dans le parent
Si non, alors
getElementById
viennent à la rescousse, mais lorsque vous attribuez le type htmlex.
OriginalL'auteur Dinesh Patil