密鑰點
this
關鍵字可能會令人困惑,尤其是在回調函數中。 在react,this
引用組件的上下文中,當功能上下文移動時可能會導致問題(例如,承諾回調)。
this
參考(別名this),在運行時注入正確的上下文(綁定此),使用ES2015箭頭功能,利用React組件方法,採用ES2016綁定語法(如果受支持),或使用接受顯式this
參數的方法。 this
>
this
>
this
>上的方法輕鬆地重新列出函數的上下文。這導致了不可預測的行為,通常會導致整個回調較重的代碼中過度new
。 問題Function.prototype
.bind(this)
react的使用
this
<code class="language-javascript">this.setState({ loading: true }); fetch('/').then(function loaded() { this.setState({ loading: false }); });</code>,因為
TypeError
引用錯誤的對象。讓我們探索解決方案。 解決方案this.setState
this
這些解決方案範圍從已建立的JavaScript技術到反應特異性方法和更新的(潛在不支持的)特徵。
1。別名這個
>一種長期的方法涉及在組件的頂級創建第二個參考:
>簡單且容易理解,這為正確的上下文提供了明確的視覺保證。雖然看似違反直覺,但它是有效而直接的。 this
>
<code class="language-javascript">const component = this; component.setState({ loading: true }); fetch('/').then(function loaded() { component.setState({ loading: false }); });</code>2。綁定此
此方法在運行時將正確的上下文注入回調:
指的是正確的對象。 但是,這種方法在深度嵌套的異步代碼中變得笨拙,並且需要為每個功能進行手動綁定。
3。 React組件方法
>時自動綁定的方法。 這允許回升回調邏輯到組件:this
React.createClass
優雅的簡單組件,這會促進清潔器代碼並消除上下文問題。 請注意,此自動連接不適用於ES2015類;那裡需要替代方法。 如果您不必要地
<code class="language-javascript">this.setState({ loading: true }); fetch('/').then(function loaded() { this.setState({ loading: false }); });</code>>
4。 ES2015箭頭功能.bind(this)
)是簡潔的,並從其封閉範圍中繼承 無論嵌套水平如何 缺點是函數命名的丟失,阻礙調試(堆棧跟踪顯示“(匿名函數)”)。 Babel彙編通常使用這種方法來維持背景。
5。 ES2016綁定語法(提案)=>
this
>
<code class="language-javascript">const component = this; component.setState({ loading: true }); fetch('/').then(function loaded() { component.setState({ loading: false }); });</code>>值。 例如:
this
>的類似缺點,通常會彙編為相同的結果。 > 6。特定於方法的方法
某些功能允許傳遞顯式::
參數(例如,this
的最終參數):
<code class="language-javascript">this.setState({ loading: true }); fetch('/').then(function loaded() { this.setState({ loading: false }); }.bind(this));</code>這是不一致的;大多數功能都缺乏此功能。
.bind(this)
有多種方法來管理
上下文。 優先使用Alias的性能,使用組件方法或命名功能調試易於易於調試,並在短內線代碼中使用箭頭函數簡潔。 最佳選擇取決於您的優先級和編碼樣式。 避免過度複雜的解決方案,以阻礙可讀性和可維護性。
this
map
常見問題(FAQS)
<code class="language-javascript">React.createClass({ componentWillMount: function() { this.setState({ loading: true }); fetch('/').then(this.loaded); }, loaded: function loaded() { this.setState({ loading: false }); } });</code>> >(為簡潔而省略了常見問題,因為它們在很大程度上涵蓋了原始文本,並且會大大增加這種已經全面的響應的長度。原始常見問題解答很好地覆蓋了此主題。 >
以上是綁定JavaScript的6種方法,在React,ES6和ES7中使用此關鍵字的詳細內容。更多資訊請關注PHP中文網其他相關文章!