선택 상자에 대해 선택된 옵션을 설정하는 React 방법은 선택 하려는 요소 의 속성에 해당 하는 특수 value
소품을 <select>
자체 에 설정하는 것입니다. A의 선택이 소품 대신 배열을 받아 들일 수 있습니다.value
<option>
multiple
이제 이것은 특별한 속성이기 때문에 사용자가 항목을 변경할 때 동일한 옵션 값 구조에서 선택한 옵션 을 검색 하는 표준 방법이 무엇인지 궁금합니다 (콜백을 통해 아마도 value
DOM 요소 에서 동일한 속성을 사용할 수 없기 때문입니다.
예제를 사용하려면 텍스트 필드를 사용하여 다음과 같은 작업을 수행합니다 (JSX).
var TextComponent = React.createClass({
handleChange: function(e) {
var newText = e.target.value;
this.props.someCallbackFromParent(newText);
},
render: function() {
return <input type="text" value={this.props.someText} onChange={this.handleChange} />;
}
});
???
이 다중 선택 구성 요소 를 대체하는 것과 동등한 것은 무엇입니까 ?
var MultiSelectComponent = React.createClass({
handleChange: function(e) {
var newArrayOfSelectedOptionValues = ???;
this.props.someCallbackFromParent(newArrayOfSelectedOptionValues);
},
render: function() {
return (
<select multiple={true} value={this.props.arrayOfOptionValues} onChange={this.handleChange}>
<option value={1}>First option</option>
<option value={2}>Second option</option>
<option value={3}>Third option</option>
</select>
);
}
});
답변
로 Array.from()
와 e.target.selectedOptions
당신은 제어 선택 – 다중을 수행 할 수 있습니다 :
handleChange = (e) => {
let value = Array.from(e.target.selectedOptions, option => option.value);
this.setState({values: value});
}
target.selectedOptions는 HTMLCollection을 반환합니다.
답변
변경 이벤트의 대상으로 실제 DOM 노드를 사용하고 있기 때문에 다른 곳에서도 동일한 방식으로 수행합니다.
handleChange: function(e) {
var options = e.target.options;
var value = [];
for (var i = 0, l = options.length; i < l; i++) {
if (options[i].selected) {
value.push(options[i].value);
}
}
this.props.someCallback(value);
}
답변
가장 쉬운 방법…
handleChange(evt) {
this.setState({multiValue: [...evt.target.selectedOptions].map(o => o.value)});
}
답변
사용하려는 경우 다음 ref
과 같이 선택한 값을 얻을 수 있습니다.
var select = React.findDOMNode(this.refs.selectRef);
var values = [].filter.call(select.options, function (o) {
return o.selected;
}).map(function (o) {
return o.value;
});
2018 ES6 업데이트
let select = this.refs.selectRef;
let values = [].filter.call(select.options, o => o.selected).map(o => o.value);
답변
양식을 작성하는 동안 선택한 옵션을 추적하려는 경우 :
handleChange(e) {
// assuming you initialized the default state to hold selected values
this.setState({
selected:[].slice.call(e.target.selectedOptions).map(o => {
return o.value;
});
});
}
selectedOptions
DOM과 관련된 배열과 같은 컬렉션 / 요소 목록입니다. 옵션 값을 선택할 때 이벤트 대상 개체에서 액세스 할 수 있습니다. Array.prototype.slice
그리고 call
우리가 새로운 상태에 대한 복사본을 만들 수 있습니다. 질문에 대한 또 다른 대답 인 ref (이벤트를 캡처하지 않는 경우)를 사용하여 이러한 방식으로 값에 액세스 할 수도 있습니다.
답변
실제로 selectedOptions
타겟 내부를 찾을 수 있습니다. 모든 옵션을 반복 할 필요가 없습니다. onChange
컴포넌트에 props로 전달 된 함수에 값을 보내고 싶다고 가정 해 봅시다 onChange
. 다중 선택 에서 다음 함수를 사용할 수 있습니다 .
onSelectChange = (e) => {
const values = [...e.target.selectedOptions].map(opt => opt.value);
this.props.onChange(values);
};
답변
다음은 나를 위해 일했습니다.
var selectBoxObj = React.findDOMNode(this.refs.selectBox)
var values = $(selectBoxObj).val()