Alors que peut-être plus simple, le vieux refs de l'API peut être difficile dans certains cas limites, comme lorsqu'il est utilisé dans un rappel. Tous les types de l'analyse statique est une douleur avec des cordes, trop. La fonction de rappel en fonction de l'API peuvent tout faire, la chaîne de l'API peut le faire et en plus avec juste un peu de verbosité.
class Repeat extends React.Component {
render() {
return <ul> {
[...Array(+this.props.times)].map((_, i) => {
return <li key={i}> { this.props.template(i) } </li>
})
} </ul>
}
}
class Hello extends React.Component {
constructor() {
super();
this.refDict = {};
}
render() {
return <Repeat times="3" template={i => <span ref= {el => this.refDict[i] = el}> Hello {i} </span>} />
{/* ^^^ Try doing this with the string API */}
}
}
Plus de discussion, et un peu plus complet de la liste des problèmes possibles avec la chaîne de caractères en fonction de l'api peuvent être trouvés à partir de la question n ° 1373, où la fonction de rappel en fonction de l'api a été introduit. Je vais l'inclure ici une liste à partir de la description du problème:
La ref de l'API est cassé à plusieurs aspects.
Vous devez vous référer à ce.refs['nomutilisateur'] comme les cordes à la Fermeture du Compilateur en Mode Avancé compatible.
Il ne permet pas à la notion de multiples propriétaires d'une seule instance.
Magique des chaînes dynamiques potentiellement briser des optimisations dans les machines virtuelles.
Il doit être toujours cohérent, parce qu'il est résolu de façon synchrone. Cela signifie que les lots de rendu introduit des bugs potentiels.
Nous avons actuellement un crochet pour obtenir de la fratrie refs de sorte que vous pouvez avoir une composante reportez-vous à son frère comme un cadre de référence. Cela ne fonctionne que d'un niveau. Cela rompt la capacité à envelopper l'un de ces dans une encapsulation.
Il ne peut pas être statiquement typé. Vous avez la lancer à toute utilisation dans des langues comme des caractères d'imprimerie.
Il n'y a aucun moyen de joindre la ref de la bonne "propriétaire" dans un rappel invoquée par un enfant. <Child renderer={index => <div ref="test">{index}</div>} />
-- réf sera joint où le rappel est émis, non pas dans l'actuel propriétaire.
Les docs d'appel de l'ancienne chaîne de l'API "legacy" pour la rendre plus claire que le rappel de l'API basée sur l'approche privilégiée est, comme il est discuté dans ce commit et dans ce PR qui sont ceux qui ont mis ces déclarations à la documentation en premier lieu. Notez également que quelques-uns des observations impliquent que la chaîne en fonction de refs api peut être obsolète à un certain point.