J'ai des champs dépendants comme celui-ci
<List>
<select>
<option></option>
<option></option>
</select>
<select>
<option></option>
<option></option>
</select>
<input />
</List>
Si j'avais 5 composants <List/>
.Comment puis-je ajouter Sélectionner2 à chaque composant.J’ai cherché sur Google en ligne.Mais je n’ai trouvé aucune solution qui fonctionne.
Code ci-dessous pour réaction-sélection. Obtention de l'erreur TypeError: event.target n'est pas défini.
var React = require('react');
var ReactDOM = require('react-dom');
var Select = require('react-select');
var Page = React.createClass({
getInitialState: function () {
return {
firstValue: ''
}
},
handleFirstLevelChange : function (event) {
this.setState({
firstValue: event.target.value
});
},
render : function(){
var options = [
{ value: '', label: 'Select an option' },
{ value: 'one', label: 'One' },
{ value: 'two', label: 'Two' }
];
return (<Select
value={this.state.firstValue}
options={options}
onChange={this.handleFirstLevelChange}
/>)
}
});
ReactDOM.render(<Page />, document.getElementById('root'));
Nous utilisons ce wrapper , mais il y a trop de problèmes autour de lui.
Tout d'abord, vous ne pouvez pas tester le code utilisé dans NodeJS en raison de ce problème . Deuxièmement, nous avons rencontré des problèmes d'initialisation de divers composants select2 via le paramètre defaultValue
. Un seul (au hasard) de ces éléments a été initalisé.
Par conséquent, nous allons le vider et le remplacer bientôt par react-select
.
EDIT: Nous avons remplacé react-select2-wrapper
par react-select
. Cela fonctionne très bien pour nous.
Puisque vous utilisez React, vous feriez mieux de rechercher des composants React plutôt que des plugins jQuery. Vous pouvez utiliser eaxmple react-select
, qui est assez similaire à Select2.
Si vous utilisez refs
[docs] , vous pouvez accéder au nœud via son attribut refs
dans la fonction componentDidMount
et le transmettre à select2()
:
var Select = React.createClass({
handleChange: function () {
this.prop.onChange(
this.refs.myRef.value
);
},
componentDidMount: function () {
// Call select2 on your node
var self = this;
var node = this.refs.myRef; // or this.refs['myRef']
$(node)
.select2({...})
.on('change', function() {
// this ensures the change via select2 triggers
// the state change for your component
self.handleChange();
});
},
render: function () {
return (
<select
ref="myRef"
onChange={this.handleChange}>
// {options}
</select>
);
}
});
Je ne crois pas que ce soit la "manière de réagir", mais cela peut aider si vous ne voulez pas utiliser react-select
ou un autre outil.
Si vous utilisez simplement jquery et select2 dans une application de réaction, vous pouvez simplement lier le cdn pour Jquery et select2 dans public/index.html à l'intérieur de la balise "head" . Puis dans votre src/components/composant.js. Vous pouvez utiliser jquery select2 comme ceci:
constructor(props) {
super(props);
this.state = {
Provinces: [],
};
this.select2PX = this.select2PX.bind(this);
// this.ApiTest = this.ApiTest.bind(this);
}
select2PX(){
window.$(document).ready(function() {
window.$('#phuong-xa').select2();
});
}
componentDidMount(){
this.select2PX();
}
render(){
return (.... html);
}
Comme vous utilisez les cdns du fichier public/.html, vous devez utiliser window. $ Pour utiliser jquery. Cela équivaut à utiliser select2 dans un fichier html.