2016-11-22 1 views
1

Я пытаюсь преобразовать существующее приложение, которое использует состояние set для использования Mobx. Как я могу достичь установленной функции обратного вызова состояния с помощью mobx. Нужно ли использовать компонентDidUpdate для достижения этой функциональности?Что такое способ Mobx для создания состояния набора с обратными вызовами

ответ

1

Вы правы в том, что вам нужно использовать componentDidUpdate, чтобы выполнить пользовательскую логику, когда компонент был повторно отображен с помощью MobX. Наблюдаемые значения будут синхронно обновляться, но компонент будет повторно отображаться асинхронно, как обычно.

Пример (JSBin)

@observer 
class App extends Component { 
    @observable value = '' 

    componentDidMount() { 
    setTimeout(() => this.value = 'focus', 1000); 
    } 

    componentDidUpdate() { 
    this.ref.focus(); 
    } 

    render() { 
    return (
     <input 
     ref={ref => this.ref = ref} 
     value={this.value} 
     onChange={e => this.value = e.target.value} 
     /> 
    ); 
    } 
}; 
+1

Спасибо, постараюсь это. –

+1

@Tholle Я не думаю, что ваше утверждение абсолютно правильно. Несмотря на то, что наблюдаемое значение 'clicks' будет иметь обновленное (синхронное) значение, DOM еще не будет повторно отображаться. Например, если у вас был элемент, который был удален из DOM из-за наблюдаемого изменения значения, этот элемент DOM все еще будет существовать после того, как значение изменилось во время обработчика кликов. Только до 'componentDidUpdate' вы можете быть уверены, что DOM обновлен. Что касается обратного вызова 'setState' ...", который должен срабатывать после того, как обновление было применено ", что означает, что DOM будет отражать любые изменения. – Gobot

+1

@Gobot Вы правы. Честно говоря, я забыл об этом ответе. Я должен удалить его. 'componentDidUpdate' должен использоваться с MobX, как вы говорите. – Tholle