Я пытаюсь воспроизвести что-то вроде предложенных SO тегов, в которых предлагаемые теги добавляются на панель ввода при нажатии. Однако похоже, что CreatableSelect не повторно инициализирует обновленные значения в реквизитах value. Я делаю что-то неправильно?
Вот мой коды для удобства.
index.js
import React from "react";
import { render } from "react-dom";
import Suggestion from "./Suggestion";
import Form from "./Form";
class App extends React.Component {
state = {
options: [
{ value: "Chocolate", label: "Chocolate" },
{ value: "Strawberry", label: "Strawberry" },
{ value: "Vanilla", label: "Vanilla" }
],
stack: [{ value: "Bananna", label: "Bananna" }]
};
// Issue here!
// Adding "Mango" into the stack. Option does not show up in the select panel
addToStack = name => {
const { stack } = this.state;
const length = Object.keys(stack).length;
stack[length] = { value: name, label: name };
this.setState({ stack: stack }, () => {
console.info("addToStack", stack);
});
};
// Replacing new array from Selectable. Option shows up in the sekect panel
replaceStack = arr => {
var { stack } = this.state;
stack = arr;
this.setState({ stack: stack }, () => {
console.info("replaceStack", stack);
});
};
render() {
const { options, stack } = this.state;
return (
<div>
<Form
stack = {stack}
options = {options}
replaceStack = {this.replaceStack}
/>
<br />
<Suggestion addToStack = {this.addToStack} />
</div>
);
}
}
render(<App />, document.getElementById("root"));Suggestion.js
import React from "react";
class Suggestion extends React.Component {
// Adds "Mango" by default
handleClick = () => {
this.props.addToStack("Mango");
};
render() {
return (
<div>
<button onClick = {this.handleClick}>
Add "Mango" into Select Panel
</button>
</div>
);
}
}
export default Suggestion;Form.js
import React from "react";
import CreatableSelect from "react-select/lib/Creatable";
class Form extends React.Component {
handleChangeEvent = (arr, action) => {
this.props.replaceStack(arr);
};
render() {
return (
<div>
<CreatableSelect
isMulti
onChange = {this.handleChangeEvent}
options = {this.props.options}
value = {this.props.stack}
/>
</div>
);
}
}
export default Form;


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


Here you go with the solution :
https://codesandbox.io/s/w695qx2q7w
addToStack = name => {
console.info("addToStack", name);
const { stack, options } = this.state;
const newstack = { value: name, label: name };
this.setState(
{ stack: [...stack, newstack], options: [...options, newstack] },
() => {
console.info("addToStack", this.state.stack);
console.info("options", this.state.options);
}
)};
в примере не добавлена опора для addToStack, но она выдающаяся. Спасибо.
Я проверил ваш код из codeandbox, на который вы ссылались в созданной вами проблеме с реакцией выбора, и это действительно похоже на ошибку. Я обратил внимание на вашу проблему с моими выводами, чтобы участники, выбирающие реакцию, рассмотрели и разрешили.