私のページには2つの react-select ドロップダウンがあります。1つはユーザーがAまたはBを選択できるようにするドロップダウンで、もう1つは「青、黄色、赤」から複数のアイテムを選択できるようにします。
これらのアイテムを選んだら、使いたいです。とりあえず、選択した値を確認したいだけなので、画面に出力するだけです。単一選択ドロップダウンでは、githubのサンプルコードを正常に使用しました。これは次のとおりです。
import React from 'react';
import Select from 'react-select';
const options = [
{ value: 'a', label: 'a' },
{ value: 'b', label: 'b' },
];
class App extends React.Component {
state = {
selectedOption: null,
}
handleChange = (selectedOption) => {
this.setState({ selectedOption });
document.write(`Option selected:`, selectedOption.value); //this prints the selected option
}
render() {
const { selectedOption } = this.state;
return (
<Select
value={selectedOption}
onChange={this.handleChange}
options={options}
//isMulti //added when the user can pick more than one
/>
);
}
}
私の質問は、マルチオプションでこれをうまく行うにはどうすればよいですか?ユーザーは必要な数だけ選択できますが、選択されたオプションを印刷すると「未定義」エラーがスローされます。これは、オプションが配列に格納されているためだと思いますが、よくわかりません。
皆さんありがとう。
handleChange
を処理するには、isMulti
を変更する必要があります。次に例を示します。
import React, { Component } from 'react';
import { render } from 'react-dom';
import Select from 'react-select';
const options = [
{ value: 'a', label: 'a' },
{ value: 'b', label: 'b' },
];
class App extends React.Component {
state = {
selectedOptions: [],
}
handleChange = (selectedOptions) => {
this.setState({ selectedOptions });
}
render() {
const { selectedOption } = this.state;
return (
<React.Fragment>
<Select
isMulti
value={selectedOption}
onChange={this.handleChange}
options={options}
/>
{this.state.selectedOptions.map(o => <p>{o.value}</p>)}
</React.Fragment>
);
}
}
render(<App />, document.getElementById('root'));
これが実際の例です: https://stackblitz.com/edit/react-czf4ib
反応フックを使用している場合、isMulti
プロパティを使用してreact-select
から選択した値を取得する方法は次のとおりです。
import React, {useState} from 'react';
import Select from 'react-select';
import { useForm } from 'react-hook-form';
import { handleSubmit } = useForm();
const options = [
{ value: 'a', label: 'a' },
{ value: 'b', label: 'b' },
];
const FormComponent = (props) => {
const [selectedOptions, setSelectedOptions] = useState([]);
const handleChange = (options) => {
setSelectedOptions(options);
};
const onSubmit = (formData, event) => {
console.log("Form Data: ", formData)
console.log("Selected Options: ", selectedOptions)
}
return (
<form onSubmit={handleSubmit(onSubmit)}>
<Select
isMulti = {true}
options={options}
closeMenuOnSelect={false}
onChange={handleChange}/>
<button type="submit">Save</button>
</form>
);
}
それが役に立てば幸い!