Добавление нового значения в кнопку CreatableSelect onClick для React-Select

Я пытаюсь воспроизвести что-то вроде предложенных 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;

Я проверил ваш код из codeandbox, на который вы ссылались в созданной вами проблеме с реакцией выбора, и это действительно похоже на ошибку. Я обратил внимание на вашу проблему с моими выводами, чтобы участники, выбирающие реакцию, рассмотрели и разрешили.

Steve -Cutter- Blades 02.11.2018 13:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
4 343
1

Ответы 1

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, но она выдающаяся. Спасибо.

tcoulson 02.05.2019 16:55

Другие вопросы по теме