最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React組件化條件渲染的實現(xiàn)

 更新時間:2024年12月02日 11:08:10   作者:葉知秋水  
本文主要介紹了React組件化條件渲染的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

背景介紹

React通常搭配jsx使用,jsx把js和視圖組合在一起,巧妙地把視圖轉換成了js模塊。但經(jīng)常寫react的應該會看到過很多這樣子的代碼:

{
  tabList.length > 2 ?
    <TabBar
      tabList={tabList}
      tabIndex={tabIndex}
      hasLoginBar={showLoginStatus}
      tabChange={handleTabChange}
      type={'sticky'}
      colorTheme={colorTheme}
      fontType={'fzlantingyuan'}
    /> : ''
}

{
  taskList.length || isPreview ?
    <p className={styles.rulesText} onClick={() => clickRules()}>規(guī)則</p> : ''
}

通過一個變量或者一個表達式,控制元素組件的顯示和隱藏。從功能上看沒什么問題,但從可讀性上,卻是可斟酌的。

  • 過多的括號或者嵌套的括號,難以閱讀
  • js表達式和元素混合,不直觀

這其實都是因為要使用js,增加了括號引起的,那有沒有辦法不適用括號呢?結合其他框架來看,方案有兩種,一種是像Vue一樣使用指令,一種是像Solid.js一樣使用組件。

由于React 本身并沒有內(nèi)置類似于 Vue.js 自定義指令(v-directive)的功能,所以最理想的還是基于組件去實現(xiàn)。

Solid.js的Show組件

那我們先來看看Solid.js的Show組件。在Solid.js里Show屬于控制流組件,其官方介紹如下:

Show 控制流用于有條件地渲染視圖的一部分:當 when 為 true 時渲染 children,否則渲染 fallback。它類似于三元運算符(when ? children : fallback),但非常適合模板化 JSX。

import { Show } from "solid-js";

function Show<T>(props: {
  when: T | undefined | null | false;
  keyed: boolean;
  fallback?: JSX.Element;
  children: JSX.Element | ((item: T) => JSX.Element);
}): () => JSX.Element;

使用方式如下:

<Show when={state.count > 0} fallback={<div>Loading...</div>}>
  <div>My Content</div>
</Show>

Show 也可以用作將塊鍵控到特定 data model 的一種方式。例如,每當替換 user model 時,都會重新執(zhí)行該方法。

<Show when={state.user} fallback={<div>Loading...</div>} keyed>
  {(user) => <div>{user.firstName}</div>}
</Show>

也可以將多個 Show 嵌套使用,用于處理多層級的條件判斷。

<Show when={user}>
  <Show when={user.isAdmin} fallback={<p>Welcome, regular user!</p>}>
    <p>Welcome, admin user!</p>
  </Show>
</Show>

React的實現(xiàn)

那我們也來實現(xiàn)一個類似效果的組件。

interface ShowProps<T> {
  when: T | undefined | null | false;
  fallback?: React.ReactNode;
  children: React.ReactNode | ((item: T) => React.ReactNode);
}

function Show({ when, fallback = null, children }) {
  return when ? children : fallback;
}

實現(xiàn)真的是很簡單,那么我們來看看前面的例子改寫后的形式

<Show when="tabList.length > 2" >
  <TabBar
    tabList={tabList}
    tabIndex={tabIndex}
    hasLoginBar={showLoginStatus}
    tabChange={handleTabChange}
    type={'sticky'}
    colorTheme={colorTheme}
    fontType={'fzlantingyuan'}
  />
</Show>

<Show when="taskList.length || isPreview" >
    <p className={styles.rulesText} onClick={() => clickRules()}>規(guī)則</p>
</Show>

的確是美觀很多,我們也可以增加異步組件的支持

const AsyncShow = ({ when, fallback, children }) => {
  const [isLoading, setIsLoading] = useState(true);
  const [data, setData] = useState(null);

  useEffect(() => {
    Promise.resolve(when).then(result => {
      setData(result);
      setIsLoading(false);
    });
  }, [when]);

  if (isLoading) return fallback;
  return data ? children : null;
};

// Usage
<AsyncShow 
  when={fetchUserData()} 
  fallback={<Loading />}
>
  {user => <UserProfile data={user} />}
</AsyncShow>

結論

在 React 中,通過結合 JSX 和組件化設計,可以實現(xiàn)更加優(yōu)雅的條件渲染。本文介紹了 Solid.js 的 Show 組件,并借鑒其理念,在 React 中實現(xiàn)了類似的 Show 組件,用于替代傳統(tǒng)的三元表達式或邏輯運算符進行條件渲染。這樣的實現(xiàn)不僅提升了代碼的可讀性,還使得 JSX 模板更加直觀和簡潔。

在日常開發(fā)中,倡導大家多學習其他框架的優(yōu)勢,不僅能開拓思維,還能優(yōu)化現(xiàn)有技術棧的使用方式。多學習并不意味著拋棄當前的技術棧,而是通過吸收優(yōu)點優(yōu)化現(xiàn)有代碼,甚至推動團隊開發(fā)的規(guī)范升級。學習其他框架的思維方式可以幫助我們跳出慣性,提高對復雜場景的解決能力。

到此這篇關于React組件化條件渲染的實現(xiàn)的文章就介紹到這了,更多相關React組件化條件渲染內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • react-router-dom6(對比?router5)快速入門指南

    react-router-dom6(對比?router5)快速入門指南

    這篇文章主要介紹了快速上手react-router-dom6(對比?router5),通過本文學習最新的react-router-dom?v6版本的路由知識,并且會與v5老版本進行一些對比,需要的朋友可以參考下
    2022-08-08
  • Electron+React應用打包全流程

    Electron+React應用打包全流程

    本文主要介紹了Electron+React應用打包全流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • React三大屬性之props的使用詳解

    React三大屬性之props的使用詳解

    這篇文章主要介紹了React三大屬性之props的使用詳解,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下
    2021-04-04
  • React中Refs的使用場景及核心要點詳解

    React中Refs的使用場景及核心要點詳解

    在使用?React?進行開發(fā)過程中,或多或少使用過?Refs?進行?DOM?操作,這篇文章主要介紹了?Refs?功能和使用場景以及注意事項,希望對大家有所幫助
    2023-07-07
  • React新文檔切記不要濫用effect

    React新文檔切記不要濫用effect

    這篇文章主要為大家介紹了React新文檔濫用effect出現(xiàn)的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 使用react context 實現(xiàn)vue插槽slot功能

    使用react context 實現(xiàn)vue插槽slot功能

    這篇文章主要介紹了使用react context 實現(xiàn)vue插槽slot功能,文中給大家介紹了vue的slot的實現(xiàn)方法,需要的朋友可以參考下
    2019-07-07
  • React組件通信實現(xiàn)流程詳解

    React組件通信實現(xiàn)流程詳解

    這篇文章主要介紹了React組件通信,在開發(fā)中組件通信是React中的一個重要的知識點,本文通過實例代碼給大家講解react中常用的父子、跨組件通信的方法,需要的朋友可以參考下
    2022-12-12
  • Ant Design組件庫的使用教程

    Ant Design組件庫的使用教程

    AntDesign ,簡稱antd是基于 Ant Design 設計體系的 React UI 組件庫,主要用于研發(fā)企業(yè)級中后臺產(chǎn)品,這篇文章主要介紹了Ant Design組件庫的使用教程,需要的朋友可以參考下
    2023-12-12
  • React框架核心原理全面深入解析

    React框架核心原理全面深入解析

    React是前端開發(fā)每天都用的前端框架,自然要深入掌握它的原理。我用 React 也挺久了,這篇文章就來總結一下我對 react 原理的理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-11-11
  • React事件處理過程中傳參的實現(xiàn)方法

    React事件處理過程中傳參的實現(xiàn)方法

    這篇文章主要介紹了React事件處理過程中傳參的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10

最新評論

双城市| 郧西县| 清徐县| 镇赉县| 台南县| 白沙| 方正县| 新津县| 义乌市| 苍溪县| 溧水县| 沧州市| 淳化县| 兴仁县| 无极县| 嘉黎县| 通渭县| 丹寨县| 呼伦贝尔市| 康马县| 南涧| 桂林市| 钟祥市| 商都县| 邻水| 屏南县| 墨脱县| 班戈县| 习水县| 苏尼特右旗| 崇州市| 武隆县| 夏河县| 襄垣县| 玉门市| 清水河县| 永吉县| 宣化县| 合作市| 仁化县| 象州县|