第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

資深React工程師才懂的事

对于初学者来说,React 可能会让新手感到棘手。然而,掌握一些关键技巧和原理可以让成为资深 React 工程师变得简单多了。

1. useEffect 的清理函数,会在每次渲染时执行,

大多数人认为它只在组件卸载时才执行,但其实并不完全是这样。

每次渲染后,上一次渲染结束时的清理回调函数会在进行下一个效果之前执行

我们来看看一个例子:

function SomeComponent() {  
  const [count, setCount] = useState(0)  

  useEffect(() => {  
    console.log('当前的计数是', count)  
    return () => {  
      console.log('上一次的计数是', count)  
    }  
  })  

  return <button onClick={() => setCount(count + 1)}>点击这里</button>  
}

这会记录如下:

    // 组件挂载时  
    当前计数是 0  

    // 点击事件  
    上一次的计数是 0  
    当前计数是 1  

    // 点击事件  
    上一次的计数是 1  
    当前计数是 2  

    // 组件卸载时  
    上一次的计数是 2

这有助于创建“取消订阅后立即重新订阅”的模式,这也是useEffect的唯一用武之地。

当然,如果我们添加了依赖项,只有在依赖项发生变化时,这些部分才会被调用。

2. useEffect 是一个底层钩子函数,通常用于库代码中。

对于初级 React 开发者来说,常常会误用 useEffect。这样可能会让代码更复杂,导致闪烁或一些难以察觉的 bug。

最常见的情况是同步不同的 useState,实际上你只需要一个 useState 即可。

    function MyComponent() {  
      const [text, setText] = useState("Lorem ipsum dolor sit amet")  

      // 你不需要这样做!  
      const [trimmedText, setTrimmedText] = useState("Lorem ip...")  

      useEffect(() => {  
        setTrimmedText(text.slice(0, 8) + '...')  
      }, [text])  
    }  

    function MyBetterComponent() {  
      const [text, setText] = useState("Lorem ipsum dolor sit amet")  

      // 你可以这样写:  
      // 每当 text 发生变化时,trimmedText 会自动更新
      const trimmedText = text.slice(0, 8) + '...'  
    }
3. 使用 key 属性来重置内部状态

当元素的 key 属性发生变化时,该渲染过程不会被视为更新,而是被视为卸载并重新挂载一个新的组件实例对象,这将具有新的初始状态。

function Layout({ currentItem }) {  
  /* 当 currentItem 变化时,<EditForm/> 内部的任何状态自动重置为新项目的初始值 */  
  return (  
    <EditForm  
      item={currentItem}  
      key={currentItem.id}  
    />  
  )  
}
4. 不要在 useState 中存服务器状态

服务器的状态基本上是你数据库中的数据的一个快照,在页面加载期间,它存在于前端内存中。

通常由像 React-Query 或 Apollo 这样的服务器状态管理器来管理。

如果你将任何内容放入useState中,当查询刷新或有突变时,你的useState里的内容就不会更新。

5. ReactElement vs ReactNode对比

ReactElement 仅表示一小段标记,而 ReactNode 可以是任何 React 可以渲染的内容,例如 ReactElement,也可以是像 stringnumberbooleanarraynullundefined 等。

    // 这是一个React元素
    const a = <div/>

    // 例如这些是React节点
    1
    "hello"
    <div/>
    [2, <span/>]
    null

// 注释:React元素和React节点是React组件中的重要概念。React元素是描述如何构建DOM节点的数据结构,而React节点可以是元素、文本或null,它们是构建React组件的基础。

不想限制可以传递给该组件的子元素类型,就将 children 属性定义为 ReactNode

JSX.Element 是 TypeScript 的一个内部功能(不是由 React 库定义的),主要面向库开发者。除此之外,它与 ReactElement 是等价的。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消