2016-11-22 4 views

答えて

1

コンポーネントがMobXで再レンダリングされたときにカスタムロジックを実行するには、componentDidUpdateを使用する必要があります。観測可能な値は同期的に更新されますが、コンポーネントは通常どおり非同期に再レンダリングされます。

例(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私はあなたの声明が完全に正しいとは思わない。観察可能なクリック数は更新された(同期的な)値を持ちますが、DOMはまだ再レンダリングされていません。たとえば、観測値の変化によりDOMから削除された要素があった場合、そのDOM要素は、クリックハンドラ内で値が変更された後も引き続き存在します。 'componentDidUpdate'が実行されるまで、DOMが更新されたことを確認することができます。 'setState'コールバックに関して..."更新が適用された後に起動することが保証されています "は、DOMが変更を反映することを意味します。 – Gobot

+1

@Gobotあなたは正しいです。私は正直言って、この答えを忘れていました。私はそれを削除する必要があります。あなたが言うように、 'componentDidUpdate'をMobXで使用する必要があります。 – Tholle

関連する問題