ですから、小道具として<option>
にキーを渡す必要がありますが、 <select>
はネイティブフィールドであり、内部的に変更を処理するので、そのキー値を取り戻すのは少し難しくなります。 一度に1つの問題を開始できます。オプションにコンポーネントをラッピングし、新しいキーの小道具としてindex
プロップを使用するだけで簡単にプロップをオプションに渡すことができます。
const CustomOption = ({ value, children, index }) => (
<option key={index} value={value}>{value}</option>
);
はまた、我々は、DOM要素上の未知の小道具のようにdoesntの反応として<option />
自体に適用されることからindex
小道具を飲み込むために上記のカスタムコンポーネントラッパーを作成していることに注意してください。
これで、選択したイベントをオプション内で処理できるようになりましたが、それはできません。私たちは、カスタムにも選択させる必要があります。
class CustomSelect extends React.Component {
static propTypes = {
value: PropTypes.object,
onChange: PropTypes.func,
}
handleChanged = (e) => {
const newValue = e.target.value;
let newKey;
// iterate through our children searching for the <CustomOption /> that was just selected
React.children.forEach(this.children, (c) => {
if (c.props && c.props.index && c.props.value === newValue) {
newKey = c.props.key;
}
});
this.props.onChange(e, newKey);
}
render() {
return (
<select value={this.props.value} onChange={this.handleChanged}>
{this.props.children}
</select>
);
}
}
、2つの小道具value
、そしてonChange
を持っています。インデックス(キー)を見つけるためにchangeイベントをインターセプトし、2番目のパラメータとして親に渡していることに注目してください。これはあまりいいことではありませんが、まだネイティブ<select>
要素を使用している間にこれを行うもう1つの簡単な方法は考えられません。
は、あなたがこれらの新しいクラスを使用する<select>
と<optoin>
のあなたの用法を交換し、オプションのkey
小道具と一緒にindex
小道具を割り当てる必要があります。
あなたは、この場合のためのカスタム属性を作る快適ますか? 'data-key'と同じですか? –