У меня одна проблема с React-Select. Я получаю это от вызова API. но он не получает того значения, которое я получаю, вызывая API.
import React from "react";
import Select from "react-select";
class SelectValue extends React.Component {
state = {
selectedValue: { label: "Select Value", value: this.props.getSelectedValue }
};
renderSelectOptions = refundOptions => {
return <span>{refundOptions.label}</span>;
};
onSelectChange = selectedRefund => {
this.setState({
selectedValue
});
};
render() {
return (
<div>
<Select
name = "select1"
placeholder = "Select"
value = {this.state.selectedValue.value}
onChange = {this.onSelectChange}
clearable = {false}
searchable = {false}
optionRenderer = {this.renderSelectOptions}
options = {[
{ value: 1, label: "Value 1" },
{ value: 2, label: "Value 2" },
{ value: 3, label: "Value 3" }
]}
/>
</div>
);
}
}
Я получаю Значение1 в this.props.getSelectedValue.
Где мне не хватает?
Любая помощь была бы замечательной.
Спасибо.
Возможный дубликат Как установить значение по умолчанию в response-select
@BoyWithSilverWings .. Как решить эту проблему?
@BrijeshPatel Либо смонтируйте компонент только после того, как вы получили данные от бэкэнда, либо напишите getDerivedStateFromProps для вашего компонента



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


если вы хотите установить начальное состояние через реквизиты, вы должны установить их внутри конструктора с реквизитами
так
constructor(props){
super(props)
this.state = {
selectedValue: { label: "Select Value", value:props.getSelectedValue }
};
}
это не работает. coz перед получением данных из базы данных будет вызван конструктор и, следовательно, он не получит данные в selectedValue.value..
Вы можете попробовать такой способ?
constructor(props){
super(props);
this.state = {
selectedValue: false,
}
}
componentDidMount = () => {
this.setState({selectedValue: this.props.getSelectedValue });
}
_changeValue = selectedValue => {
if (selectedValue.value !== null) {
this.setState({ selectedValue: selectedValue.value });
}
}
render(){
const { selectedValue } = this.state;
let values = [{ value: true, label: 'first' }, { value: false, label: 'second' }];
return(
<div>
<Select
name = "selectedValue"
value = {selectedValue}
onChange = {this._changeValue}
options = {values}
/>
</div>
)
}
class SelectComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
value: props.value
}
}
handleChangeEvent() {
}
render() {
return (
<Select
name = "form-field-name"
value = {this.state.value}
onChange = {this.handleChangeEvent}
options = {[
{ value: 'one', label: 'One' },
{ value: 'two', label: 'Two' },
]}
/>
);
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
value: null
}
}
componentDidMount() {
this.getDataFromAPI().then(data=>{
this.setState({
value: data
});
});
}
getDataFromAPI() {
return new Promise((resolve, reject)=>{
setTimeout(()=>resolve('one'), 1000);
});
}
render() {
return (
<React.Fragment>
{
this.state.value &&
<SelectComponent value = {this.state.value} />
}
</React.Fragment>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));<script crossorigin src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script crossorigin src = "https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.2/prop-types.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/classnames/2.2.5/index.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/react-input-autosize.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/react-select.js"></script>
<link rel = "stylesheet" href = "https://unpkg.com/[email protected]/dist/react-select.css">
<div id = "root"></div>class SelectComponent extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<Select
name = "form-field-name"
value = {this.props.value}
onChange = {this.props.handleChangeEvent}
options = {[
{ value: 'one', label: 'One' },
{ value: 'two', label: 'Two' },
]}
/>
);
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
value: null
}
}
componentDidMount() {
this.getDataFromAPI().then(data=>{
this.setState({
value: data
});
});
}
getDataFromAPI() {
return new Promise((resolve, reject)=>{
setTimeout(()=>resolve('one'), 1000);
});
}
render() {
return (
<React.Fragment>
<SelectComponent value = {this.state.value} handleChangeEvent = {this.handleChangeEvent} />
</React.Fragment>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));<script crossorigin src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script crossorigin src = "https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.2/prop-types.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/classnames/2.2.5/index.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/react-input-autosize.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/react-select.js"></script>
<link rel = "stylesheet" href = "https://unpkg.com/[email protected]/dist/react-select.css">
<div id = "root"></div>getDerivedStateFromProps, чтобы установить состояние для измененных свойств.class SelectComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
value: null
}
}
static getDerivedStateFromProps(props, state) {
if (props.value!==state.value) {
return {
value: props.value
}
}
return null;
}
handleChangeEvent() {
}
render() {
return (
<Select
name = "form-field-name"
value = {this.state.value}
onChange = {this.handleChangeEvent}
options = {[
{ value: 'one', label: 'One' },
{ value: 'two', label: 'Two' },
]}
/>
);
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
value: null
}
}
componentDidMount() {
this.getDataFromAPI().then(data=>{
this.setState({
value: data
});
});
}
getDataFromAPI() {
return new Promise((resolve, reject)=>{
setTimeout(()=>resolve('one'), 1000);
});
}
render() {
return (
<React.Fragment>
<SelectComponent value = {this.state.value} />
</React.Fragment>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));<script crossorigin src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script crossorigin src = "https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.2/prop-types.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/classnames/2.2.5/index.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/react-input-autosize.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/react-select.js"></script>
<link rel = "stylesheet" href = "https://unpkg.com/[email protected]/dist/react-select.css">
<div id = "root"></div>Я все еще не получил ответа. Я получаю данные в this.props.getValue. как я могу передать это значение в select, который имеет предварительно выбранное значение.
@BrijeshPatel Ни в одном из фрагментов кода нет вашего ответа? Все они демонстрируют использование props для установки значения select
Я использовал все ваши фрагменты, но не получил желаемого результата.
@BrijeshPatel Чем отличается ваш случай? Опора, поступающая асинхронно, должна устанавливать значение для всех демонстраций.
Я получаю значение в this.props.getValue, которое я получаю от родительского компонента, так как я могу справиться с этим со значением по умолчанию?
Вы получаете значение для установки в this.props.getValue от родителя, и хотите установить его для компонента «Выбрать»?
точно. это то, что я хочу. и я не могу вставить конструктор, так как он будет вызываться первым перед методом рендеринга. Я ставлю условие, что if (this.props.getValue) then only I render иначе я покажу загрузчик, пока данные не будут загружены.
Это то, что делают все три демо. @BrijeshPatel
большое спасибо за ваше время и усилия. все равно я не получаю желаемого результата .. :(
propобновляется после монтирования компонента?