[英]How to use Select2 with Reactjs?
我有像这样的依赖字段
<List>
<select>
<option></option>
<option></option>
</select>
<select>
<option></option>
<option></option>
</select>
<input />
</List>
如果我有5个<List/>
组件。如何将Select2添加到每个组件。我在网上搜索。但找不到任何有效的解决方案。
react-select下面的代码。获取错误TypeError:event.target是未定义的 。
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'));
既然你正在使用React,你最好不要寻找React组件而不是jQuery插件。 您可以使用eaxmple react-select
,这与Select2非常相似。
如果您正在使用refs
[docs] ,则可以通过componentDidMount
函数中的refs
属性访问该节点,并将其传递给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>
);
}
});
我不相信这是“反应方式”,但如果您不想使用react-select
或其他工具,这可能会有所帮助。
如果你只是在一个react应用程序中使用jquery和select2,你只需链接cdn for Jquery和select2 in public / index.html里面的“head”标签。 然后在你的src / components / component.js中。 您可以像这样使用jquery select2:
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); }
因为你在public / .html文件中使用cdns,所以你需要使用window。$来使用jquery。 它实现了与在html文件中使用select2相同的功能。
简单的包装。
在index.html上添加select2 js + css,在select输入上写入包装器
function renderOptions(option_items) {
if(option_items) {
return Object.entries(option_items).map(function (item) {
return <option key={item[0]} value={item[0]}>{item[1]}</option>
})
}
}
class Select2Input extends Component {
constructor(props) {
super(props)
this.ref_input = React.createRef()
}
/**
* Add select2 bind and send onChange manually
*/
componentDidMount() {
const self = this
$(self.ref_input.current).select2({
tags: true,
}).on('change', function(event) {
var value = $(event.currentTarget).val()
if(self.props.multiple === true) {
value = List(value)
}
self.props.onChange(self.props.name, value)
})
}
/**
* Emit change event for reload select2 if options has change
*/
componentDidUpdate(prevProps) {
if(prevProps.option_items !== this.props.option_items) {
$(this.ref_input.current).change()
}
}
render() {
return <select className="form-control"
multiple={this.props.multiple}
name={this.props.name}
value={this.props.value}
disabled={this.props.disabled}
ref={this.ref_input}>
{renderOptions(this.props.option_items)}
</select>
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.