setState
получает дополнительную функцию обратного вызова, который вызывается после того, как метод setState
закончил. Вы можете передать обработчик для этого события как prop
.
Например, каждый раз, когда вы вводите что-то на input
, состояние должно измениться. Вы можете передать обработчик onInputChange
как prop
, который выполняется каждый раз, когда состояние завершится сменой из-за изменения ввода. Это событие, о котором я говорил, имеет смысл только для компонентов uncontrollable
. Если компонент был controllable
, событие будет срабатывать по мере ввода, и было бы ответственностью controller-component
, чтобы повторно перенести компонент в результате изменения ввода.
Что касается тестов, модульные тесты не обязательно синхронны .. На самом деле, в моем случае, я часто использую обратный вызов done
. Как это:
it('test something', (done) => { myModule.doSomething((error, success) => done()); });
Приведенный выше пример будет работать на karma
и mocha
, например.
Ну, это работает, но можете ли вы это сделать без использования обработчика обратного вызова в setState? Я бы хотел избежать изменения кода для поддержки тестов. – adrian
Я боюсь, что специально для «неконтролируемых» компонентов вы не можете. Единственный способ признать изменение состояния - это передать этот обработчик. Невозможно вызвать синхронно «setState», о котором я знаю. Я просто проверил документы снова, чтобы быть уверенным. –
Хорошо, получилось, мне просто кажется, что вам всегда нужно настраивать свой код, чтобы следить за тем, что происходит, без ручного переопределения setstate, чтобы увидеть, вызвано ли оно правильными данными. – adrian