成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

四個非常有用的 React 技巧

開發 前端
我們經常需要在React的useEffect中監聽鍵盤事件、鼠標事件等,但是我們經常忘記刪除它們。

1.不要忘記在組件卸載時移除監聽器

我們經常需要在React的useEffect中監聽鍵盤事件、鼠標事件等,但是我們經常忘記刪除它們。

const windowScroll = () => {
console.log('scroll')
}


useEffect(() => {
window.addEventListener("scroll", windowScroll, false)
}, [])

是的,當我們回到這個組件的時候,scroll事件又會被監聽。

換句話說,我們可能會將數千個 windowScroll 函數綁定到 window, 這將導致內存泄漏和偵聽器的意外行為。

請不要忘記在組件卸載時移除監聽器。

const windowScroll = () => {
console.log('scroll')
}


useEffect(() => {
window.addEventListener("scroll", windowScroll, false)
return () => {
window.removeEventListener('scroll', windowScroll, false)
}
}, [])

2.請謹慎使用0,它是魔鬼

你可能寫過類似下面的代碼,它顯示了什么?還是什么都沒有顯示?

const App = () => {
const [ list, setList ] = useState([])


return (
list.length && (
<div className="list">
{list.map((name) => {
return <div className="item">{name}</div>
})}
</div>
)
)
}

我不認為這段代碼有什么問題!但是確實顯示了0。難道是React的BUG?

const i = 0
const b = 'fatfish'


console.log(i && b)

我錯了,這不是 React 中的錯誤,它完全符合 JavaScript 語法。

為了避免錯誤顯示0,我們需要使用以下三種方法來解決這個問題。

// 1. Controlled by specific logic
list.length >= 1 && <Component list={list} />
// 2. Convert list.length to boolean
!!list.length && <Component list={list} />
// 3. Use ternary expressions and null
list.length ? <Component list={list} /> : null

3. 如何輕松將 true 傳遞給子元素

我們經常需要在調用一個組件的時候給它傳遞一個布爾值,比如顯式傳遞true。

const Child = ({ showNav }) => {
return !!showNav && <Nav />
}


const Parent = () => {
return <Child showNav = { true } />
}

實際上,您只需要傳遞 showNav 屬性即可, 它們都具有完全相同的效果。

const Child = ({ showNav }) => {
return !!showNav && <Nav />
}


const Parent = () => {
return <Child showNav/>
}

4. 請不要再使用 props.children

請問這段代碼的結果是什么?它是空的嗎?

const Container = ({ children }) => {
if (children) {
return (
<div className="children-container">
<p>Children is:</p>
{ children }
</div>
)
} else {
return (
<div className="empty">empty</div>
)
}
}


const App = () => {
const [ list, setList ] = useState([])


return (
<Container>
{
list.map((name) => {
return <div className="item">{ name }</div>
})
}
</Container>
)
}

不幸的是,答案是:“Children is:”。我的天啊!這是為什么?

其實,此時children是一個空數組,所以肯定會顯示“Children is:”。我們如何解決這個問題?React.Children.toArray 會拯救我們。

const Container = ({ children }) => {
if (React.Children.toArray(children).length) {
return (
<div className="children-container">
<p>children is:</p>
{ children }
</div>
)
} else {
return (
<div className="empty">empty</div>
)
}
}

寫在最后

以上就是今天我跟大家分享的4個非常實用的React技巧,希望能夠幫助到你,編程快樂!

責任編輯:華軒 來源: web前端開發
相關推薦

2020-10-29 10:00:55

Python函數文件

2009-02-09 11:20:06

Windows7Windows

2020-06-15 10:29:10

JavaScript開發 技巧

2025-02-13 08:06:54

2023-10-26 07:47:35

JavaScript代碼變量

2009-03-24 14:23:59

PHP類庫PHP開發PHP

2011-07-07 17:16:43

PHP

2017-08-02 13:32:18

編程Java程序片段

2023-09-06 16:55:33

JavaScript閉包

2023-06-13 15:15:02

JavaScript前端編程語言

2018-08-03 10:02:05

Linux命令

2022-09-02 23:08:04

JavaScript技巧開發

2013-11-05 10:03:22

Eclipse功能

2013-06-14 14:57:09

Java基礎代碼

2013-08-12 15:00:24

LinuxLinux命令

2021-03-09 09:14:27

ES2019JavaScript開發

2022-06-27 19:01:04

Python應用程序數據

2013-08-21 10:31:22

HTML5工具

2013-08-13 10:46:51

LinuxLinux命令

2011-04-06 14:08:14

jQuery
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费久久精品 | 欧美日韩亚洲国产 | 一区二区三区免费 | 成人免费视频网站在线看 | 天天天堂 | 中文字幕在线二区 | 国产一区不卡在线观看 | 国产小视频在线观看 | 欧美一区在线视频 | 精品一区二区在线观看 | 日韩网站免费观看 | 四虎午夜剧场 | 精品久久香蕉国产线看观看亚洲 | 亚洲精品一区二 | 91精品在线观看入口 | 国产高清免费 | 操操日| 91在线一区| 午夜爱爱网 | 久久亚洲一区二区三 | 亚洲欧美中文日韩在线v日本 | 伊人久久精品一区二区三区 | 粉嫩国产精品一区二区在线观看 | www.天天操.com| 伊人亚洲 | 中文字幕精品一区二区三区精品 | 免费毛片网 | 日韩欧美三区 | 日韩三级在线 | 国产日韩精品一区二区 | 91精品国产麻豆 | 91久久国产综合久久91精品网站 | 中文字幕日韩欧美一区二区三区 | 国产一区二区在线观看视频 | 久久久国产一区二区 | 亚洲精品日韩一区二区电影 | 天天色天天色 | 看片91| 美女一级黄 | 日韩精品一区二区三区中文字幕 | 农村真人裸体丰满少妇毛片 |