WedX - журнал о программировании и компьютерных науках

реагировать, формы: не удается прочитать свойство «длина» неопределенного

У меня очень простая структура. У меня есть поле ввода и текстовое поле. Я хочу управлять значениями input/textarea в состоянии. Также я хочу проверить поле textarea (максимум 140 символов). Я делаю простое если для того.

И теперь, когда я что-то набираю в первом вводе, у меня ошибка:

Uncaught TypeError: невозможно прочитать свойство «длина» неопределенного в App.render (App.jsx: 44) (...)

Я понятия не имею, почему у меня эта ошибка. Я даже ничего не делаю в своем текстовом поле еще...

код:

class App extends Component {
  state = {
    formValues: {
      title: "",
      description: ""
    }
  };

  titleValueChangeHandler = e => this.setState({ formValues: { title: e.target.value } });


  descriptionValueChangeHandler = e => {
    if (this.state.formValues.description.length === 140) return;
    this.setState({ formValues: { description: e.target.value } });
  };

  render() {
    return (
      <>
        <input
          type="text"
          onChange={this.titleValueChangeHandler}
          value={this.state.formValues.title}
        />
        <textarea
          onChange={this.descriptionValueChangeHandler}
          value={this.state.formValues.description}
        />
        <p>{this.state.formValues.description.length}</p>
      </>
    );
  }
} 

демо: https://codesandbox.io/s/kw6pnxwv0v

05.03.2019

  • у меня есть эта проблема в реакции, я не уверен в первопричине, но в качестве обходного пути вы можете использовать (this.state.formValues.description||''), чтобы предотвратить сбой, поскольку безопасно принять значение по умолчанию пустой строки. вот как я всегда работал над этой конкретной проблемой. если вы найдете основную причину, пожалуйста, поделитесь здесь. 05.03.2019

Ответы:


1

вы переписываете состояние в eventHandler.

Вам нужно использовать prevState для сохранения предыдущего состояния объекта:

titleValueChangeHandler = e => this.setState(prevState => ({ ...prevState, formValues: { title: e.target.value, description: prevState.formValues.description }}));

И для закрытия рефакторинга следующим образом:

titleValueChangeHandler = e => {
const newValue = e.target.value
this.setState(prevState => ({ ...prevState, formValues: { title: newValue , description: prevState.formValues.description }}));
}
05.03.2019
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]