Удаление объекта из массива - javascript

Я помещаю компонент div в свой массив при нажатии кнопки, если выполняются некоторые условия. И я показываю свой список на мой взгляд. Он работает хорошо, но я столкнулся с проблемой при попытке удалить компонент div из моего массива. Почему мой список не обновляется, когда я пытаюсь удалить объект из массива, но он работает, когда я добавляю объект в массив множество? Я хочу обновить свой массив, даже когда я удаляю объекты из массива, поэтому он должен удалить компонент div, который я удаляю в режиме реального времени.

Я проверил, используя журналы консоли, и код работает правильно, поскольку он удаляет компонент div, когда я нажимаю на removetextpoll, но проблема в том, что мое мнение остается неизменным.

мой код выглядит следующим образом.

class TextVotePost extends Component {
  constructor() {
    super();
    this.state = {
      addOption: 3,
      maxImage: 4,
      optionBtn: true,
    };
    this.addOption = this.addOption.bind(this);
  }

  addOption() {
    this.setState(prevState => ({
      addOption: ++prevState.addOption,
    }));
  }

  render() {
    let list = [];
    const textPollMaxLength = 35;

    function removetextpoll() {
      list.splice(0, 1);
    }

    for (let i = 3; i <= this.state.maxImage; i++) {
      {
        this.state.addOption > i &&
          list.push(
            <div key = {i}>
              <div className = "txt_vote_bar_div">
                <div onClick = {removetextpoll} />

                <Field
                  name = {`inputName${i}`}
                  component = "input"
                  type = "text"
                  placeholder = {`Option ${i}`}
                  maxLength = {textPollMaxLength}
                />
              </div>
            </div>,
          );
      }
    }

    return (
      <form onSubmit = {this.props.handleSubmit}>
        {list}
        <div onClick = {this.addOption}>
          <span>Add Option</span>
        </div>
        }
      </form>
    );
  }
}

Повторный рендеринг запускается изменением состояния или свойства.

Remownz 03.08.2018 08:30

при добавлении вы устанавливаете состояние, которое запускает повторную визуализацию, однако при удалении вы ничего не делаете, поэтому, хотя данные могут быть удалены, это не отражается в пользовательском интерфейсе

Shubham Khatri 03.08.2018 08:33
Поведение ключевого слова "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
2
83
1

Ответы 1

Компоненты React повторно визуализируются только при изменении их состояния или свойств. Список не является частью состояния или реквизита, это просто список, который вы объявили в своей функции рендеринга.

Когда вы добавляете опцию, вы меняете состояние в addOption(), но для удаления опции вы просто соединяете этот массив напрямую. Вам необходимо отредактировать список через состояние или свойства, чтобы изменение вызывало повторную визуализацию и ваше представление обновлялось.

И как кто-то прокомментировал (похоже, они его сейчас удалили), имейте в виду разницу между splice() и slice(). Непосредственное изменение состояния / свойств не приведет к повторному рендерингу, а также вызовет ошибки и странное поведение. Чтобы изменить реквизит, вам нужно передать новое свойство или изменить состояние, вам нужно использовать setState().

Итак, какой подход я должен предпринять, чтобы решить эту проблему?

CraZyDroiD 03.08.2018 09:47

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