Как сказал @Keith, передайте обработчик prop
, который обновляет состояние родительского элемента ( App ) и выполняет его при изменении выбора в дочернем элементе ( DropDown ) , React-Select
возвращает объект при изменении выделения, так что вам нужно было бы извлечь пару label-value
.
Я использую здесь React Hooks, потому что ловушки удивительны:)
DropDown. js component
import React from "react";
import Select from "react-select";
import "bootstrap/dist/css/bootstrap.min.css";
const techCompanies = [
{ label: "Button", value: 1 },
{ label: "CheckBox", value: 2 },
{ label: "Color", value: 3 },
{ label: "Date", value: 4 },
{ label: "Local Date time", value: 5 },
{ label: "Email", value: 6 },
{ label: "File", value: 7 },
{ label: "Hidden", value: 8 },
{ label: "Image", value: 9 },
{ label: "Month", value: 10 },
{ label: "Number", value: 11 },
{ label: "Password", value: 12 },
{ label: "Radio", value: 13 },
{ label: "Range", value: 14 },
{ label: "Reset", value: 15 },
{ label: "Search", value: 16 },
{ label: "Submit", value: 17 },
{ label: "Telephone", value: 18 },
{ label: "Text", value: 19 },
{ label: "Time", value: 20 },
{ label: "URL", value: 21 },
{ label: "Week", value: 22 }
];
const DropDown = ({ handleSelectionChange }) => {
// Handler to track changes on selection
const handleChange = () => selectedValue => {
handleSelectionChange(selectedValue); // 2. Note that the selectedValue is in the curried param.
};
return (
<div className="container">
<div className="row">
<div className="col-md-4" />
<div className="col-md-4">
<Select
options={techCompanies}
onChange={handleChange()} // 1. make a call to the handler here
/>
</div>
<div className="col-md-4" />
</div>
</div>
);
};
export default DropDown;
- Вызвать дочерний обработчик DropDown
handleChange()
при изменении выбора. Не забывайте скобки. - Захватите значение curry и передайте его родителю, вызвав команду prop
handleSelectionChange
. js компонент
import React, { useState } from "react";
import DropDown from "./DropDown";
const App = () => {
const [userSelect, setUserSelect] = useState({});
const handleChange = selectedValue => {
// 3. Finally Capture the value from the DropDown here and update the state
setUserSelect(() => setUserSelect(selectedValue));
};
// 4. Extract out the value from the state
const { label, value } = userSelect;
return (
<div className="App">
{userSelect.value && <h1>{`${value} : ${label}`}</h1>}
<DropDown handleSelectionChange={handleChange} />
</div>
);
}
export default App;
Функция App's
handleChange
получает объект значения из DropDown
в handleChange
через команду handleSelectionChange
и использует его для обновления своего собственного состояния.
Обратите внимание, что React-Select сохраняет выбранные значения в виде пары {label: value}, поэтому вам необходимо извлечь необходимое значение для отображения в пользовательском интерфейсе.
Извлечь Live Sandbox