私は次のように定義するreact-selectコンポーネントを持っています:
<Select
id="portf"
options={opts}
onChange={value => portfolioSelector(value)}
placeholder="Select Portfolio"
/>
opts = [{label: any, value:1}, {label:Two, value:2}]
。
選択した値は、portfolioSelector
関数を介して状態で保存されます。問題は、値を選択したときに、選択フィールドに表示されなかったことです。私の主なコンポーネントはこれです:
const PortfolioSelector = ({
opts,
portfolioSelector
}) => {
if (opts) {
return (
<div className="portfolio select-box">
<label htmlFor="selectBox" className="select-box__label">
Portfolio
</label>
<div className="select-box__container">
<Select
id="portf"
options={opts}
onChange={value => portfolioSelector(value)}
placeholder="Select Portfolio"
/>
</div>
<div className="separator" />
</div>
);
}
return (
<div>Loading</div>
);
};
なぜなのかご存知ですか?
まず、label:anyまたはTwoが文字列の場合、間違った配列が作成されます。二重引用符を追加する必要があります。これを見てください:
opts = [{label: "any", value:1}, {label:"Two", value:2}]
次に、この場合のオプションは、optsがラベルと値を持つオブジェクトの配列であり、状態に追加するデータは何かということを覚えておく必要があります。
<Select
id="portf"
options={opts}
onChange={value => portfolioSelector(value.value /* or if you want to add label*/ value.label)}
placeholder="Select Portfolio"
/>
修正しました。 付加価値プロパティを忘れました。これを使用して、作業コードを確認してください。
const opts = [{ label: 'any', value: 1 }, { label: 'Two', value: 2 }];
const PortfolioSelector = ({ options }) => {
if (options) {
return (
<div className="portfolio select-box">
<label htmlFor="selectBox" className="select-box__label">
Portfolio
</label>
<div className="select-box__container">
<Select
id="portf"
options={options}
value={this.state.opts1}
onChange={value => this.setState({ opts1: value })}
placeholder="Select Portfolio" />
</div>
<div className="separator" />
</div>
);
}
return <div>Loading</div>;
};
コンポーネントを呼び出します
<PortfolioSelector options={opts} />