Представление рендеринга, когда массив обновляется внутри функции рендеринга в reactjs

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

Примечание: массив обновляется правильно, единственная проблема в том, что я не могу отобразить обновленный массив, так как не происходит изменения состояния.

мой код

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>
    );
  }
}

сохранить массив внутри состояния

Shubham Agarwal Bhewanewala 03.08.2018 10:06

я пробовал. Но представление не выводит мои компоненты div при использовании состояния

CraZyDroiD 03.08.2018 10:12

какое действие вы делаете? и каков ваш ожидаемый результат и текущий результат?

Tzook Bar Noy 03.08.2018 10:21

ожидаемый результат: при нажатии на «Добавить параметр» мне нужно добавить компонент div в свой массив и отобразить добавленный компонент div. (эта часть работает). При нажатии на «removetextpoll» мне нужно удалить компонент div из div (это тоже работает, но не удаляет компонент div из представления)

CraZyDroiD 03.08.2018 10:26

вызывает ли удаление ошибки?

Shubham Agarwal Bhewanewala 03.08.2018 10:37
Поведение ключевого слова "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
5
49
1

Ответы 1

Без setState() React не знает, что он должен изменить вашу точку зрения.

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

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

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

  render() {
    const textPollMaxLength = 35;


    return (
      <form onSubmit = {this.props.handleSubmit}>

        {[...Array(this.state.addOption).keys()].map((item, i) => (
            <div key = {i}>
            <div className = "txt_vote_bar_div">
              <div onClick = {this.removetextpoll}>remove</div>
              <Field
                name = {`inputName${i}`}
                component = "input"
                type = "text"
                placeholder = {`Option ${i}`}
                maxLength = {textPollMaxLength}
              />
            </div>
          </div>
        ))}

        <div onClick = {this.addOption}>
          <span>Add Option</span>
        </div>
        {JSON.stringify(this.state)}
      </form>
    );
  }
}

ReactDOM.render(<TextVotePost />, document.querySelector("#app"))

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