Срез происходит в коде, но не обновляется в пользовательском интерфейсе

  • в исходном состоянии есть три раскрывающихся меню.
  • после того, как я выберу первое раскрывающееся меню, загружаются вторые раскрывающиеся значения
  • после того, как я выберу вторые раскрывающиеся значения.
  • новый набор выпадающих нагрузок.
  • когда я выбираю кнопку удаления второго набора.
  • он не удаляет этот набор, но удаляет первый набор.
  • когда я отлаживал метод removeSelectedValue, срезы выполняются правильно, но не обновляются при обновлении
  • Можете ли вы сказать мне, как передать значения queryComponents, чтобы они обновлялись в пользовательском интерфейсе.
  • подскажите, как это исправить.
  • так что в будущем я сам исправлю.
  • предоставляя соответствующий фрагмент кода и песочницу ниже.
  • весь мой код находится в demo.js

https://codesandbox.io/s/4x9lw9qrmx

removeSelectedValue = index => {
    console.info("removeSelectedValue--->", index);
    let seletedValues = this.state.queryComponents;
    seletedValues.splice(index, 1);
    console.info("spliced Values--->", seletedValues);
    this.setState({ queryComponents: seletedValues });
  };

  render() {
    let queryComp = this.state.queryComponents.map((value, index) => {
      return (
        <AutoCompleteComponent
          key = {index}
          value = {value}
          index = {index}
          valueSelected = {this.getSelectedValue}
          removeSeleted = {this.removeSelectedValue}
        />
      );
    });

    return <div>{queryComp}</div>;
  }
Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда делаешь let seletedValues = this.state.queryComponents; вы создаете ссылку на эту переменную вместо того, чтобы делать копию.

Вам нужно убедиться, что вы заменили свое состояние новым объектом / массивом, чтобы произошел повторный рендеринг.

Пожалуйста, попробуйте это:

removeSelectedValue = index => {
    this.setState(prevState => ({
        queryComponents: prevState.seletedValues.filter((a, i) => (i !== index));
    });
};

Эта функция фильтра эквивалентна используемой вами сварке, но возвращает новый массив вместо изменения исходного.

С другой стороны, я передаю setState функцию, которая использует prevState, делая код короче.

эй, я обновил ваш код в песочнице, но все еще сталкиваюсь с проблемами :( codeandbox.io/s/4x9lw9qrmx

user10803047 19.12.2018 02:05

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