Тормозит приложение при наборе текста

297
26 апреля 2017, 11:48

Есть приложение, использующее React в связке с Redux

Везде, где идет набор текста в input или textarea приложение начинает тормозить. Люди жалуются.

Почитал, что надо отключить devtools - отключил.

Дальше идут рекомментации по оптимизации shoultComponentUpdate, но тут надо обновлять каждый раз, т.к. каждая буква должна пропечататься.

Кто нибудь сталкивался с похожей проблемой? Может ли влиять на это размер состояния приложения? Состояние приложения объединяется из нескольких reducer'ов (7-8 штук) Каждый reducer может быть как Immutable.js объектом, так и простым js объектом.

На onChange вызывается один метод, который всплывает вверх по вложенным компонентам реакта на 3-4 уровня. Затем вызывается один экшн, который возвращает разу же объект, содержащий только name и value. Дальше один reducer его подхватывает и изменяет состояние через Immutable.setIn в одну строку.

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

Answer 1

Попробуйте использовать uncontrolled компоненты. Изменение содержимого input не приводит к изменению состояния компонента, соответственно не вызывается лишний раз метод render(), при этом, буквы в input пропечатываются. А значение input доступно по ссылке this.input.value, и вы можете использовать его, например, при отправке формы.

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleSubmit(event) {
    alert('A name was submitted: ' + this.input.value);
    event.preventDefault();
  }
  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" ref={(input) => this.input = input} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}
READ ALSO
Как перекинуть данные в HTML таблицу? Не могу перекинуть данные с тегов в таблицу(

Как перекинуть данные в HTML таблицу? Не могу перекинуть данные с тегов в таблицу(

Немного модифицировал ваш код в сниппет, в котором видно, что после вызова open значение thisreadyState = 1, а после send значение this

215
Сортировка по алфавиту. Помогите

Сортировка по алфавиту. Помогите

Суть задачи такова что в textarea вводятся ссылки, а функция должна вырезать из них "https://" и вернуть отсортированный список ссылокУдалить "https://"...

305
JQuery export to excel IE не работает

JQuery export to excel IE не работает

Подскажите как решить проблему выгрузки из IE версии 10+? Код здесь

274