亚洲AVI,黑人巨茎大战欧美白妇,初高中生洗澡自慰高清网站,欧美日韩无砖专区一中文字

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

如何在React中使用箭頭函數(shù)

如何在React中使用箭頭函數(shù)?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、高安網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城網(wǎng)站制作、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為高安等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

解決 this 引起的問題

箭頭函數(shù)不會在函數(shù)體內(nèi)重新定義 this 的值,這使得在回調(diào)中的行為更容易預(yù)測,并且避免了 this 在回調(diào)中潛存的 bug

下面我們來看一個 example

我們期望點擊按鈕,改變按鈕顏色,代碼如下

class BrokenButton extends React.Component {
 render() {
 return (
  
  Set background to red
  
 );
 }

 handleClick() {
 this.setState({ backgroundColor: "red" });
 }
}

render(, document.getElementById("root"));

然而,當我們點擊按鈕時,什么效果都沒有,為什么會這樣呢

其實,不是 handleClick 方法沒有起作用,因為 JavaScript 中壓根沒有方法, JavaScript 中只有函數(shù),而函數(shù)中的 this 存在一些規(guī)則,正是這些規(guī)則,讓上面的 handleClick 中的 this 值變成了 null

你需要清楚明白的是: 你無法確定一個方法函數(shù)中 this 的指向,因為它的值跟函數(shù)的調(diào)用方式有關(guān)

除非,你使用 箭頭函數(shù),因為箭頭函數(shù)中 this 的值是繼承自 外圍作用域

class Button extends React.Component {
 render() {
 return (
  
 );
 }
}

render(, document.getElementById("root"));

現(xiàn)在就對了,接下來,我們繼續(xù)

瀏覽器支持

瀏覽器對 箭頭函數(shù) 的支持大概是 73%,因為目前,IE 并不支持。但如果你已經(jīng)意識到這一點,并且你還會代碼轉(zhuǎn)譯,這對你來說就不算什么問題

性能問題

大家都發(fā)現(xiàn)了,箭頭函數(shù) 書寫起來是非常容易的,但書寫忒多的函數(shù),也會造成一些問題

定義函數(shù)是昂貴的

瀏覽器每執(zhí)行一次 =>,就需要創(chuàng)建一個 新的函數(shù)對象,這其實是一個比較 昂貴 的操作

當然,如果你不是想構(gòu)建一個 性能超級無敵宇宙螺旋棒 的組件,渲染一個 非常長 的列表或 非常大 的表格,你也不會發(fā)現(xiàn)這是一個 問題

所以,如果你的組件只是在頁面中渲染個幾次,你也 沒必要忒擔心 性能這方面的問題

兩個相同的箭頭函數(shù)并不相等

為了讓大家意識到這個問題,接下來,我們用 == 比較一下兩個相同的箭頭函數(shù)相不相等

const a = x => x,
  b = x => x;

render(
 
 

  Are a and b equal by ==?  

 

  {a == b ? "Yes!" : "No :("}  

 
,  document.getElementById("root") );

如果你在 render 中使用箭頭函數(shù),那么你在每次調(diào)用 render 時都會去創(chuàng)建一個新的函數(shù)對象,此時,即使使用 PureComponent 和 shouldComponentUpdate 也起不到優(yōu)化作用

你可以在下面實例中看清這一點,其中, 組件用于打印 props 改變的次數(shù)

import PropChangeCounter from "react-armory-prop-change-counter";

class App extends React.Component {
 constructor(props) {
 super(props);
 this.state = { email: "" };
 }
 render() {
 return (
  
   this.setState({ email: e.target.value })}   />    this.setState({ email: e.target.value })}   />   
 );  } } render(, document.getElementById("root"));

只定義一次

如果你覺得 性能 對你的組件很重要,那么你肯定會想如果在組件中只定義箭頭函數(shù) 一次 該有多好

其中一種實現(xiàn)方式是在 constructor 中使用箭頭函數(shù),當然,對于復(fù)雜些的組價來說,這會變的很笨拙

如果你使用了 Babel 或 create-react-app 構(gòu)建你的應(yīng)用,你可以將箭頭函數(shù)設(shè)置為 class fields 或 arrow function methods

如下,你可以將 handleClick 重新定義為一個 arrow function method,來修復(fù)第一個 example 中的 bug

class Button extends React.Component {
 render() {
 return (
  
  Set background to red
  
 );
 }

 // Note: this syntax is not yet part of JavaScript proper, but is slated
 // for inclusion in the next version. It should already work with Babel.
 handleClick = () => {
 this.setState({ backgroundColor: "red" });
 };
}

關(guān)于如何在React中使用箭頭函數(shù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


分享文章:如何在React中使用箭頭函數(shù)
地址分享:http://news.spvevtbd.cn/article/ihppoj.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP