react-bootstrap을 사용하여 다이내믹드롭다운리스트를 작성하려면 어떻게 해야 하나요?
react-bootstrap 사이트의 예제 코드는 다음을 나타냅니다.어레이를 사용하여 옵션을 구동해야 하는데 컴파일할 예를 찾을 수 없습니다.
<Input type="select" label="Multiple Select" multiple>
<option value="select">select (multiple)</option>
<option value="other">...</option>
</Input>
이 두 가지 기능으로 시작할 수 있습니다.첫 번째는 페이지에 전달된 소품을 기반으로 선택 옵션을 동적으로 작성합니다.이러한 항목이 상태에 매핑되어 있는 경우 선택 항목이 자동으로 다시 생성됩니다.
createSelectItems() {
let items = [];
for (let i = 0; i <= this.props.maxValue; i++) {
items.push(<option key={i} value={i}>{i}</option>);
//here I will be creating my options dynamically based on
//what props are currently passed to the parent component
}
return items;
}
onDropdownSelected(e) {
console.log("THE VAL", e.target.value);
//here you will see the current selected value of the select input
}
그러면 이 코드 블록이 렌더링 안에 있습니다.함수 참조를 onChange 소품으로 전달하면 onChange가 호출될 때마다 선택한 개체가 해당 함수와 자동으로 바인딩됩니다.또한 수동으로 옵션을 작성하는 대신 createSelectItems() 함수를 호출하여 몇 가지 제약조건(변경 가능)에 따라 옵션을 빌드하고 반환합니다.
<Input type="select" onChange={this.onDropdownSelected} label="Multiple Select" multiple>
{this.createSelectItems()}
</Input>
작업 예
this.countryData = [
{ value: 'USA', name: 'USA' },
{ value: 'CANADA', name: 'CANADA' }
];
<select name="country" value={this.state.data.country}>
{this.countryData.map((e, key) => {
return <option key={key} value={e.value}>{e.name}</option>;
})}
</select>
화살표 기능을 사용하여 동적 드롭을 바인드합니다.
class BindDropDown extends React.Component {
constructor(props) {
super(props);
this.state = {
values: [
{ name: 'One', id: 1 },
{ name: 'Two', id: 2 },
{ name: 'Three', id: 3 },
{ name: 'four', id: 4 }
]
};
}
render() {
let optionTemplate = this.state.values.map(v => (
<option value={v.id}>{v.name}</option>
));
return (
<label>
Pick your favorite Number:
<select value={this.state.value} onChange={this.handleChange}>
{optionTemplate}
</select>
</label>
);
}
}
ReactDOM.render(
<BindDropDown />,
document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root">
<!-- This element's contents will be replaced with your component. -->
</div>
// on component load, load this list of values
// or we can get this details from api call also
const animalsList = [
{
id: 1,
value: 'Tiger'
}, {
id: 2,
value: 'Lion'
}, {
id: 3,
value: 'Dog'
}, {
id: 4,
value: 'Cat'
}
];
// generage select dropdown option list dynamically
function Options({ options }) {
return (
options.map(option =>
<option key={option.id} value={option.value}>
{option.value}
</option>)
);
}
<select
name="animal"
className="form-control">
<Options options={animalsList} />
</select>
기본적으로 필요한 것은 어레이를 매핑하는 것입니다.그러면 다음 목록이 반환됩니다.<option>
렌더링할 양식 내부에 배치할 수 있습니다.
array.map((element, index) => <option key={index}>{element}</option>)
완전한 기능 컴포넌트를 렌더링합니다.<option>
s는 컴포넌트 상태에 저장되어 있습니다. Multiple
여러 요소를 클릭해서 선택할 수 있습니다.드롭다운 메뉴를 원하는 경우 삭제합니다.
import React, { useState } from "react";
const ExampleComponent = () => {
const [options, setOptions] = useState(["option 1", "option 2", "option 3"]);
return (
<form>
<select multiple>
{ options.map((element, index) => <option key={index}>{element}</option>) }
</select>
<button>Add</button>
</form>
);
}
작업 예: https://codesandbox.io/s/blue-moon-rt6k6?file=/src/App.js
1개의 라이너는 다음과 같습니다.
import * as YourTypes from 'Constants/YourTypes';
....
<Input ...>
{Object.keys(YourTypes).map((t,i) => <option key={i} value={t}>{t}</option>)}
</Input>
목록 상수를 별도의 파일에 저장한다고 가정합니다(웹 서비스에서 다운로드하지 않는 한 저장해야 합니다).
# YourTypes.js
export const MY_TYPE_1="My Type 1"
....
매핑을 위한 키를 추가해야 합니다.그렇지 않으면 각 소품에는 고유한 키가 있어야 하므로 경고가 발생합니다.아래 코드 개정:
let optionTemplate = this.state.values.map(
(v, index) => (<option key={index} value={v.id}>{v.name}</option>)
);
map()을 사용하여 다이내믹 선택 옵션을 만들 수 있습니다.
코드 예시
return (
<select className="form-control"
value={this.state.value}
onChange={event => this.setState({selectedMsgTemplate: event.target.value})}>
{
templates.map(msgTemplate => {
return (
<option key={msgTemplate.id} value={msgTemplate.text}>
Select one...
</option>
)
})
}
</select>
)
</label>
);
자동 검색을 사용하여 이 작업을 수행할 수 있습니다.간단한 시나리오로 보기엔 좀 길어 보이지만 누군가에게 도움이 될 것 같아 글을 올렸습니다.
먼저 컴포넌트를 생성하여 재사용할 수 있도록 합니다.
interface DynamicSelectProps {
readonly id: string
readonly options: any[]
readonly defaultValue: string | null
readonly disabled: boolean
onSelectItem(item: any): any
children?:React.ReactNode
}
export default function DynamicSelect({id, options, defaultValue, onSelectItem, disabled}: DynamicSelectProps) {
const [selection, setSelection] = useState<any[]>([]);
return <>
<Typeahead
labelKey={option => `${option.key}`}
id={id}
onChange={selected => {
setSelection(selected)
onSelectItem(selected)
}}
options={options}
defaultInputValue={defaultValue || ""}
placeholder="Search"
selected={selection}
disabled={disabled}
/>
</>
}
콜백 함수
function onSelection(selection: any) {
console.log(selection)
//handle selection
}
사용.
<div className="form-group">
<DynamicSelect
options={array.map(item => <option key={item} value={item}>{item}</option>)}
id="search-typeahead"
defaultValue={<default-value>}
disabled={false}
onSelectItem={onSelection}>
</DynamicSelect>
</div>
언급URL : https://stackoverflow.com/questions/36205673/how-do-i-create-a-dynamic-drop-down-list-with-react-bootstrap
'programing' 카테고리의 다른 글
ngInject는 다음 코드에서 무엇을 합니까? (0) | 2023.03.26 |
---|---|
Typescript React App에서 특정 소품을 지정하고 일반적인 HTML 소품을 받아들입니다. (0) | 2023.03.26 |
리액트스트랩과 리액트 부트스트랩의 차이점은 무엇입니까? (0) | 2023.03.26 |
Wordpress Tween Header Scroll 모바일 줌인 (0) | 2023.03.26 |
material-ui 아이콘버튼에서 SVG 아이콘을 확대하는 방법 (0) | 2023.03.26 |