2016-11-22 43 views

回答

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中刪除,則在點擊處理程序中該值發生更改後,該DOM元素仍然存在。直到'componentDidUpdate'你能確定DOM已被更新。關於'setState'回調......「在應用更新後保證觸發」,這意味着DOM將反映任何更改。 – Gobot

+1

@Gobot你說得對。說實話,我忘了這個答案。我應該刪除它。正如你所說,'componentDidUpdate'必須和MobX一起使用。 – Tholle