自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

請(qǐng)停止在 React 中使用“&&”進(jìn)行條件渲染

開發(fā) 前端
React 是一個(gè)目前流行的前端框架之一,可以幫助我們高效地構(gòu)建用戶界面。

React 是一個(gè)目前流行的前端框架之一,可以幫助我們高效地構(gòu)建用戶界面。

但是在使用React進(jìn)行開發(fā)時(shí),我們卻不能正確使用&&,很容易導(dǎo)致UI錯(cuò)誤。

因此,我們需要知道,&&運(yùn)算符導(dǎo)致的React UI界面錯(cuò)誤。

如何工作?

我們應(yīng)該用什么代替&&?

1. &&運(yùn)算符導(dǎo)致的React UI界面錯(cuò)誤

我經(jīng)常需要編寫需要從服務(wù)器端獲取數(shù)據(jù)的頁面,這些數(shù)據(jù)用于呈現(xiàn)列表。如果數(shù)據(jù)的長度為0,則不應(yīng)顯示。

const App = () => {
  const [list, setList] = React.useState([]);
  const fetchList = () => {
    // Simulate fetching data from the server via setTimeout
    setTimeout(() => {
      setList([])
    }, 1000)
  }


  React.useEffect(() => {
    fetchList()
  }, [])
  return (
    list.length && (
      <div className="name-list-container">
        {list.map((name) => {
          return <div className="name-list-item">{name}</div>;
        })}
      </div>
    )
  );
};
ReactDOM.render(<App />, document.getElementById('app'))

眼見為實(shí),我的朋友們,所以請(qǐng)點(diǎn)擊此Codepen的鏈接進(jìn)行查看。

地址:https://codepen.io/qianlong/pen/BarvKbW?editors=1010

你會(huì)注意到,當(dāng) list 是一個(gè)空數(shù)組時(shí),頁面將呈現(xiàn) 0 而不是什么都沒有。

我的天哪,這到底是怎么回事?

2.&& 是如何工作的?

這是一個(gè) React 錯(cuò)誤嗎?值得慶幸的是,這個(gè)問題的原因不是因?yàn)?React 犯了錯(cuò)誤,而是與 Javascript 本身的工作方式有關(guān)。

來自 MDN的解釋:當(dāng)且僅當(dāng)所有操作數(shù)都為真時(shí),一組布爾操作數(shù)的邏輯與 (&&) 運(yùn)算符(邏輯合?。┎艦檎?。否則就是假的。

一般運(yùn)算符返回從左到右計(jì)算時(shí)遇到的第一個(gè)假操作數(shù)的值,或者如果它們都是真值,則返回最后一個(gè)操作數(shù)的值。

讓我們學(xué)習(xí)一個(gè)非常簡單的例子,我想你會(huì)很快理解的。

const a = 0
const b = "React"
const c = 1
const d = "Javascript"


console.log(a && b) // 0
console.log(c && d) // Javascript

當(dāng)你在代碼中使用a && b時(shí),如果a為0,則直接返回,不再計(jì)算b的值。

你一定明白為什么上面的 React 例子顯示 0 了。

3.我們應(yīng)該用什么來代替&&?

&& 運(yùn)算符很容易出錯(cuò),我們是否應(yīng)該放棄使用它呢?

不,我們不應(yīng)該那樣做。我們可以嘗試這3種方式來避免這個(gè)問題。

3.1 使用!!list.length

我們可以把數(shù)組的長度轉(zhuǎn)成布爾值,就不會(huì)再出現(xiàn)這個(gè)錯(cuò)誤了。

// 1. Convert list.length to boolean
!!list.length && <Component list={list} />

3.2 使用 list.length >= 1

和上面的原理一樣,我們用另一種方式將其轉(zhuǎn)為布爾值。

// 2. Controlled by specific logic
list.length >= 1 && <Component list={list} />;

3.3 使用三元表達(dá)式

如果您的應(yīng)用程序不是特別復(fù)雜并且僅使用 1 或 2 個(gè)三元表達(dá)式即可解決,我會(huì)推薦它。

// 3. Use ternary expressions and null
list.length ? <Component list={list} /> : null;

結(jié)尾

以上這就是這篇文章的全部內(nèi)容!如果你覺得有用的話,請(qǐng)點(diǎn)贊我,關(guān)注我,你將會(huì)閱讀到更多的優(yōu)質(zhì)文章。

最后,感謝你的閱讀。

責(zé)任編輯:華軒 來源: web前端開發(fā)
相關(guān)推薦

2018-10-08 08:00:00

前端ReactJavaScript

2024-11-25 07:00:00

箭頭函數(shù)JavaScriptReact

2021-03-17 11:21:06

React數(shù)據(jù)存儲(chǔ)

2023-10-04 07:25:59

JavaScriptpromises

2023-12-05 15:58:06

React開發(fā)

2020-10-31 21:59:37

Python列表開發(fā)

2024-05-10 12:29:30

接口類型

2020-10-23 09:57:23

TypeScriptany代碼

2022-05-24 14:37:49

React條件渲染

2024-11-26 08:30:33

2021-11-29 22:59:34

Go Dockertest集成

2023-10-28 16:22:21

Go接口

2024-02-07 11:44:20

NestJSRxJS異步編程

2022-11-30 15:01:11

React技巧代碼

2022-06-10 08:01:17

ReduxReact

2020-08-02 22:42:25

JavaScript開發(fā)

2020-05-26 11:39:05

WebReact組件

2011-12-08 10:24:53

JavaNIO

2019-12-12 13:50:27

strace追蹤系統(tǒng)調(diào)用Linux

2024-01-30 08:30:41

TypeScript編譯器類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)