Задать вопрос
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

ReactJS ошибка — «This synthetic event is reused for performance reasons», что делать?

Изучаю React по документации, дошел до раздела с формами и возникло недопонимание: если сохранять значение поля так: this.setState({value: e.target.value}) - все работает. Но, возвращаясь к разделу Состояние и жизненный цикл - видим, что рекомендуется обновлять `state` так:
e.persist();
this.setState(state => ({
	value: e.target.value
}));

Ок, рекомендуется, не вопрос. При выполнение кода - ошибка This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property `target` on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). See https://fb.me/react-event-pooling for more information.. Иду смотреть указанный раздел. Из всего прочитанного складываются следующие мысли: React возвращает событие не в стандартном виде, а в своем. Чтобы получить стандартное событие, перед обновлением `state` нужно дополнительно вызывать e.persist(). Вызывал, все заработало.

Вопрос: правильно ли я все понял?

class App extends React.Component {

	constructor() {
		super();
		this.state = {value: 'Hello, world!'}
	}

	formUpdate = (e) => {

		// вариант 1
		this.setState({value: e.target.value});

		// вариант 2
		e.persist();
		this.setState(state => ({
			value: e.target.value
		}));

	}

	render() {
		return (
			<div>
				<h1>{this.state.value}</h1>
				<form>
					<label>Новое название:
						<input type="text" value={this.state.value} onChange={this.formUpdate}/>
					</label>
					<button type="submit">Изменить</button>
				</form>
			</div>
		);
	}

}

ReactDOM.render(<App/>, document.getElementById("root"));
  • Вопрос задан
  • 3361 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
правильно ли я все понял?

нет

"Получить стандартное событие" - откуда вы это взяли? Испытываете проблемы с пониманием английского текста - можете попробовать русский вариант.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы