Pour synchroniser dynamiquement vos entrées avec votre tableau d'état, vous pouvez utiliser le package linkState
du package react-catalyst. Une fois que vous avez installé avec NPM vous pouvez l'utiliser de la manière suivante:
//need to import
import Catalyst from 'react-catalyst';
ElementsClass = React.createClass({
// mixin the linkedstate component
mixins : [Catalyst.LinkedStateMixin],
getInitialState: function() {
return {
elements: []
}
},
addElement: function() {
var element = {
name: ""
};
//add to elements array
this.state.elements.push(element);
//let react know to rerender necessary parts
this.setState({
elements : this.state.elements
});
},
render() {
return (
{this.state.elements.map(function (element, i) {
//use the linkState method
return <input valueLink={this.linkState('elements.'+i+'.name')} />
}
)}
)
}
La raison pour laquelle nous avons besoin du paquet react-catalyst
est que uniquement Réagissons nativement valueLink
lier des éléments d'état de niveau supérieur, dans votre cas elements
. Évidemment, ce n'est pas particulièrement utile, mais heureusement, c'est un problème assez facile à résoudre.
Remarque: pour les éléments itérés comme les entrées d'élément, vous devez fournir une clé unique. Quelque chose comme ce qui suit (pourrait avoir besoin en train de modifier pour être plus précis):
{this.state.elements.map(function (element, i) {
//use the linkState method
return <input valueLink={this.linkState('elements.'+i+'.name')} key={'elinput' + i} />
}
)}
Cela n'a pas d'effet vers l'extérieur sur votre application, il est surtout pour aider l'élément cible réagir en interne.
Désolé, je ne pense pas que je clarifié la question complètement. Lorsque vous ajoutez 'value = {element.name}' dans le champ de saisie, le champ de saisie ne peut pas être modifié. Comment puis-je ajouter une méthode onChange qui cible correctement l'entrée pertinente dans le tableau des éléments – Pram
@Pram ah, j'ai complètement mal compris. C'est en fait un peu plus compliqué. Vous devez utiliser 'valueLink' au lieu de' value' * mais * React ne le permet que pour les valeurs d'état de niveau supérieur. Je mettrai à jour ma réponse, mais vous aurez besoin d'une bibliothèque comme 'react-catalyst' pour faire la liaison bidirectionnelle de cette façon. –
@Pram s'il vous plaît voir ma réponse mise à jour –