(Translated by https://www.hiragana.jp/)
React Hooks优化 · Issue #27 · Vibing/blog · GitHub
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

React Hooks优化 #27

Open
Vibing opened this issue Aug 7, 2020 · 0 comments
Open

React Hooks优化 #27

Vibing opened this issue Aug 7, 2020 · 0 comments

Comments

@Vibing
Copy link
Owner

Vibing commented Aug 7, 2020

React Hooks

react hooks てき使用しよう需要じゅようざい function component 组件ちゅう本文ほんぶん讲述ざい使用しよう react hooks ちゅう你需要注意ようちゅういてきいち些事さじじょう

じょう态每あらため变,せい个 function 都会とかいおもしん执行

可能かのう导致:函数かんすうてき每次まいじ执行,其内てい义的变量方法ほうほう都会とかいおもしん创建,也就说会从新给它们分配ぶんぱいないそん,这会导致性能せいのう受到かげ

下面かめん这个れい

import React, { useState, ReactElement } from 'react'
import { Button } from 'antd'

let num = 0; // よう于记录当ぜん组件执行次数じすう

export default (): ReactElement => {
  console.log('render num: ', ++num) // しるし执行次数じすう

  let [count, setCount] = useState(0)

  const handleClick = () => {
    setCount(++count)
  }

  return (
    <>
      <p>count: {count}</p>
      <Button type="primary" onClick={handleClick}>
        Button
      </Button>
    </>
  )
}

はつはじめ时执ぎょうりょういち

现在てんさん按钮,让 count じょう态改变:

见,まいあらためいち count, 该组けん对应てきせい个 function かいじゅうしん执行,其内变量方法ほうほうかいじゅうしん创建,从而かげ性能せいのう

かい决方ほう

  • 变量つきりょうざい函数かんすう外部がいぶ
  • 方法ほうほう使用しよう useCallback つつみ裹起らい

使用しよう方法ほうほう

const handleClick = useCallback(()=>{
    // 业务だい
},[ count ])

useCallback てき作用さよう:组件はつはじめ时,はただいいち个参すう函数かんすう“缓存”おこりらいただゆうざいだい个参すうすう组中てき值)ゆう变化时,つつみ裹的はこすうさいかいじゅうしん创建,いや则不かいじゅうしん创建。

总结:变量つきりょうざい组件外部がいぶてい义,函数かんすう使用しよう useCallback つつみ裹起らい,避免组件 render 时重复创けん

ちち组件更新こうしん组件也跟执行

さい个例わが们把上面うわつられいさく为父组件,ざいさとめん添加てんかいち个子组件.

ちち组件:

export default (): ReactElement => {
  let [count, setCount] = useState(0)

  const handleClick = useCallback(() => {
    setCount(++count)
  }, [count])

  return (
    <>
      <p>count: {count}</p>
      
      {/* 这里添加てんかいち个子组件 */}
      <ChildrenComponent />

      <Button type="primary" onClick={handleClick}>
        Button
      </Button>
    </>
  )
}

组件だい码:

export default (): ReactElement => {
  console.log('children render')

  return <div>children component</div>
}

现在わがさいてんさん按钮,让父组件 render さん

だい爷的,组件しるしさん表示ひょうじ执行りょうさん

肯定こうていわがそうようてきわがそうようてき组件需要じゅよう渲染てき时候さい执行,么如なんかい决?

こたえ使用しよう React.memo

React.memo 类似 class 组件さとてき PureComponent , のう帮助わが们控せいごう适重しん渲染组件。

注意ちゅうい:说它类似,ただし不完全ふかんぜんいち样,它更ぞう PureComponent + shouldComponentUpdate てき结合。
PureComponent どおり过 props state てきあさ较来判断はんだんよう不要ふようおもしん渲染组件。

么在 react hooks ざと如何いかうつし

わが们把组件じょう React.memo :

export default React.memo(
  (): ReactElement => {
    console.log('children render')

    return <div>children component</div>
  },
)

现在さいてんさん按钮:

见,组件さいしるし,也就さい执行りょう

React.memo 也提供ていきょうりょう shouldComponentUpdate こうのうよう于自てい义比较来决定渲染:

React.memo(MyComponent, (prevProps, nextProps)=>{
 // 如果传递 nextProps 渲染かいかえしかいあずか传递 prevProps 渲染しょうどうてき结果,则返かい true,いや则返かい false.
 
 // return true:渲染  return false:渲染
})

总结

  • 使用しよう useCallback 缓存てい义的函数かんすう
  • 使用しよう React.memo 避免必要ひつようてき render

如果ゆうさらこのみてきけん议,请留ごと

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant