2016-07-07 40 views
2

我學習reactJs,閱讀文檔的這部分後:ismounted反模式,追蹤自己的財產

的人升級他們的代碼,以避免 isMounted()一個簡單的遷移策略是跟蹤自己的安裝狀態。只需在componentDidMount中設置 _isMounted屬性爲true,並在componentWillUnmount中將其設置爲false,並使用此變量檢查您的 組件的狀態。

這是否意味着_isMounted的值必須存儲在state

我有這個至今:

isMounted: function(){ 
    this.setState({ _isMounted: true }); 
}, 

componentDidMount: function() { 
    if(this.state._isMounted) { // This is bad. 
     this.setState({...}); 
    } 
}, 
+0

我實際上接受的答案不同意,並認爲它的意思,把它像'this._isMounted = TRUE;在didMount中使用didMount和'... = false',然後用'if(this._isMounted)'來檢查你需要的地方' – TKoL

回答

1

是的,你可以在state跟蹤_isMounted,因爲:

  1. 它不能從道具計算
  2. 您很可能會使用它render()

通過https://twitter.com/dan_abramov/status/749710501916139520

http://codepen.io/mikechabot/pen/GqvyOE

SomeComponent.jsx

class SomeComponent extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     _isMounted: false 
    } 
    } 
    componentDidMount() { 
    this.setState({ 
     _isMounted: true 
    }) 
    } 
    render() { 
    const { _isMounted } = this.state; 
    return (
     <div> 
     Mounted? { _isMounted ? 'Yes' : 'No' } 
     </div> 
    ) 
    } 
}