簡體   English   中英

返回組件數組的 React 自定義鈎子

[英]React Custom Hook that returns array of Components

這是與自定義鈎子一起使用的錯誤模式嗎?

我傳入一個數組,然后循環遍歷它以確定將顯示哪些組件。

import React from "react";
import { Image, Paragraph, Header } from "../../components/Blocks";

export const useBlocks = (blocks) => {
  const items = blocks.map((item: Item) => {
    switch (item.name) {
      case "image":
        return <Image key={item.order} data={item.data} />;
      case "paragraph":
        return <Paragraph key={item.order} data={item.data} />;
      case "heading":
        return <Header key={item.order} data={item.data} />;
      default:
        return null;
    }
  });

  return items;
};

使用鈎子返回 JSX 不是一種常見的模式。 對於您所描述的更直接且更符合行業標准的實現,只需將其創建為一個組件即可。

我將 switch 邏輯外推到它自己的組件,以防需要在應用程序的其他地方重用它。 這樣也更容易閱讀和測試行為。

import React from "react";
import { Image, Paragraph, Header } from "../../components/Blocks";

function BlockImage({item}) {
  switch (item.name) {
    case "image":
      return <Image data={item.data} />;
    case "paragraph":
      return <Paragraph data={item.data} />;
    case "heading":
      return <Header data={item.data} />;
    default:
      return null;
  }
}

export const Blocks = ({blocks}) => {
  return (
    <>
      {blocks.map((item: Item) => <BlockImage key={item.order} item={item} />}
    </>
  );
}

通過實現這個鈎子,我可以看出你正在應用工廠模式

檢查此 URL 以獲取更多詳細信息: https : //refactoring.guru/design-patterns/factory-method

當基於給定的輸入在運行時加載動態組件/類時,它很有用。 此外,如果創建組件的成本有點高,並且您想統一您的解決方案,那么這也是不錯的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM