La raison de ce ESLint règle existe, c'est que la chaîne de Refs sont sur leur chemin. Cependant, pour le code ci-dessus, je recommande de ne pas utiliser une Ref en premier lieu.
Ne multipliez pas les Refs
Réagir l'avantage est qu'il est déclaratif. Sens, nous avons de l'état et de l'expression (renvoyée JSX) de la façon dont l'INTERFACE utilisateur (plus précisément les DOM) devrait ressembler à un certain état.
Tout ce qui peut être fait en utilisant seulement de l'état de l'INTERFACE et de l'expression, doit être fait de cette façon. Le problème avec l'utilisation d'une Ref dans le code ci-dessus est qu'elle rend le code impératif. Nous ne pouvons pas comprendre comment les DOM cherchera simplement à partir de la JSX. Voici comment vous pouvez obtenir le même résultat de manière déclarative:
export class myComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
active: false
};
}
handleClick = () => { // with arrow function there is no need for binding.
this.setState(
prevState => {
return {
active: !prevState.active
}
}
)
}
render() {
return (
<div>
<span
onClick={this.handleClick}
className={`glyphicon ${this.state.active && "active"}`}
>
Hello World
</span>
</div>
);
}
}
Les références doivent être utilisés lors de l'état de l'INTERFACE et de l'expression ne sont pas assez, et vous avez besoin d'accéder à un autre DOM. Par exemple, en se concentrant sur un champ de saisie, le défilement d'un élément, ou d'obtenir la largeur exacte et la hauteur d'un élément.
Si vous utilisez des Refs, éviter chaîne de refs
Chaîne de refs nuire à la performance, ne sont pas composable, et sont sur il y a moyen de sortir.
chaîne de refs ont des problèmes, sont considérés comme un héritage, et sont susceptibles d'
être retiré dans une des prochaines versions. [Officiel de Réagir documentation]
[resource1][1], [resource2][1]
Option #1: Utilisation De Réagir.createRef
class MyComponent extends Component {
constructor(props) {
super(props)
this.myRef = React.createRef() // create a ref object
}
render() {
return <div ref={this.myRef}></div> // Attach the ref property to a dom element
}
}
Option #2: Utilisez une ref de rappel
class MyComponent extends Component {
constructor(props){ // Optional, declare a class field
super(props)
this.myRef=null
}
render() {
return <div ref={ (ref) => this.myRef=ref }></div>
} // Attach the dom element to a class field
}