У меня есть текстовое поле в моем приложении Meteor + React. Я хочу синхронизировать его значение с коллекцией Mongo. Однако я не хочу обновлять коллекцию после каждого нажатия клавиши, только когда пользователь перестал печатать на несколько секунд.
Текстовое поле в моей функции render()
выглядит так:
<input type="text" ref="answer" onChange={this.onChange} value={this.state.someValue} />
Я сохраняю значение текстового поля в this.state
вместо this.data
, потому что this.data
отражает коллекцию Mongo, которая, возможно, еще не была обновлена.
Пока все это работает.
Проблема:
Если другой клиент обновляет коллекцию, я хочу, чтобы в текстовом поле отображалось обновленное значение. Для этого мне нужно обновить this.state
внутри функции getMeteorData()
, но это запрещено, и я получаю сообщение об ошибке: "Вызов setState внутри getMeteorData может привести к бесконечному циклу".
Прямо сейчас у меня есть обходной путь, когда я вручную обновляю значение текстового поля в componentDidMount()
и getMeteorData()
, но это кажется хакерским, и мне это совсем не нравится.
Есть лучший способ сделать это? Могу ли я принудительно обновить состояние внутри getMeteorData()
, если я пообещаю, что буду хорошим мальчиком и буду вести себя хорошо?