组件基因©rich in Crazystack Next使用UI Chakra的类别详细信息。
#javascript #react #reactnative #braziliandevs

欢迎使用UI脉轮和原子设计中的类别细节中的Genã组件©Rich Rich。在此类中,我们将探索如何创建类别-rich基因组件,可以在不同的用户界面项目中轻松地重复使用。使用UI脉轮的功率,一组用户界面设计工具和原子设计,整个以创建用户界面组件的层次结构,我们将创建一个多功能且灵活的组件。

Image description
该课程的视频将很快在Bootcamp Crazystack上发布,如果您仍然没有确保您的位置,请单击aqui

原子设计使我们能够从较小,更简单的组件(例如tomes,mollets and Billys和生物)创建更复杂的组件。通过使用这种方法,我们可以创建可重用组件和烫伤的组件,这些组件可以轻松修改并适应不同的设计需求。结合UI脉轮(提供多种投影和定制的组件),我们可以快速创建有吸引力且功能强大的用户界面。

在此课程的结尾,您将清楚地了解如何使用UI脉轮和原子设计创建富含类别的基因组件。您也可以应用此知识来为自己的常规接口创建其他可重复使用的,比例和可自定义的组件。让我们开始!

genericdetailsitete

该文件实现了可以在项目的不同部分中使用的MOLL,以显示项目的富基因详细信息。他使用UI脉轮网格系统显示项目的每个细节。显示的详细信息是通过将作为MOLL的道具传递的字段列表确定的。 Moll高度重复使用,因为它不是任何特定项目的特定,成为原子设计概念的良好实现。

import { Grid, GridItem, Text } from "@chakra-ui/react";
import React from "react";
interface GenericDetailsItemProps {
  item: any;
  fields: any[];
}

export const GenericDetailsItem: React.FC<GenericDetailsItemProps> = ({
  item,
  fields,
}) => {
  return (
    <Grid
      templateRows="repeat(2, 1fr)"
      templateColumns={["repeat(1,1fr)", "repeat(2,1f)", "repeat(3,1fr)"]}
      gap={2}
    >
      {!!item &&
        fields?.map?.((field, index) => (
          <React.Fragment key={`${Math.random() * 10}-${index}`}>
            {!!item?.[field?.id] && (
              <GridItem w="100%" p={["0", "0", "0", "4"]}>
                <Text>{field?.label}:&nbsp;</Text>
                <Text>{item?.[field?.id]}</Text>
              </GridItem>
            )}
          </React.Fragment>
        ))}
    </Grid>
  );
};

上面是称为Koud0的React组件,它是一个可以在项目的不同部分重复使用的MOLL,可以以表格格式显示项目。该组件使用Koud1软件包进行样式化。

该组件接收两个属性:

  • item:一个包含要显示的项目信息的对象。
  • fields:描述要显示的项目字段的对象的矩阵。每个对象都包含一个id属性,该属性是item对象的字段键,以及一个应该显示到字段的标签。

该组件由Grid组成,该组件是一个灵活的网格,用于在列中显示项目信息。 Grid具有交易:

  • templateRows:定义线的数量及其在网格中的高度。
  • templateColumns:定义列数及其在网格中的宽度。对于不同的屏幕尺寸,使用UI脉轮的响应矩阵语法自动调整列数。例如,对于小屏幕,templateColumns具有列(repeat(1, 1fr)),而对于较大的屏幕,它具有瞬态列(koud13)。
  • gap:定义网格卢拉斯之间的空间。

该组件还使用.map函数传播koud3矩阵并为每个字段生成一组koud17。每个GridItem都包含一个Text章和项目的相应值,该值显示在相邻的列中。 Koud17具有定义卢拉宽度的w属性。对于不同的屏幕尺寸,使用UI脉轮的响应性语法自动调整此宽度。

最后,该组件使用!!条件语法来确保仅当项目具有该字段的值时才显示该字段。如果项目没有该字段的值,则不会显示该字段。

类别网

该文件实现了显示特定类别详细信息的生物。它使用mole genericdetailsem显示类别的详细信息,还具有编辑按钮,将用户带到类别编辑板上。身体是特定于显示类别细节的特定的,并将Moll用作其细节的组成部分。

import { Flex, GenericDetailsItem, Text, Button } from "shared/ui";
import { Heading, Icon } from "@chakra-ui/react";
import NextLink from "next/link";
import { RiAddLine } from "react-icons/ri";
import { CategoryProps } from "../category.model";
type CategoryDetailsProps = {
  category: CategoryProps;
};

export const CategoryDetails = ({ category }: CategoryDetailsProps) => {
  return (
    <>
      <Flex mb="8" justify="space-between" align="center">
        <Heading size="lg" fontWeight={"normal"}>
          Categoria {category?.name}
        </Heading>
        <NextLink passHref href={`/categorys/edit/${category?._id}`}>
          <Button
            size="sm"
            fontSize={"sm"}
            colorScheme="green"
            leftIcon={<Icon fontSize="20" as={RiAddLine} />}
          >
            Editar
          </Button>
        </NextLink>
      </Flex>
      <GenericDetailsItem
        item={category}
        fields={[
          { id: "name", label: "Nome" },
          { id: "createdById", label: "Id do criador" },
          { id: "createdAt", label: "Data de criação" },
        ]}
      />
    </>
  );
};

上面的会议定义了一个称为categoryDe​​tails的React组件,该组件负责显示特定类别的详细信息。它接收一个称为“类别”的属性,该属性是一个对象,其中包含有关要显示的类别的信息。该组件由两个主要元素组成,一个flex组件和一个通用尾座组件。

FLEX组件负责显示p。的标题和编辑Botan的标题。标题定义为“类别”,然后定义为类别的名称,该名称使用点的点从“类别”属性中提取。编辑器的botan是一个将用户带到类别边缘的NextLink组件。

GenericDetailstem组件负责显示类别详细信息,例如名称,创建者的ID和繁殖日期。它收到两个属性,“项目”和“字段”。 “项目”属性定义为传递给类别网络组件的“类别”属性。 “字段”属性是一个对象数组,描述了应该在类别的详细信息列表中显示的字段。

GenericDetailsem组件使用UI脉轮的网格组件在网格中显示类别的详细信息。它映射“字段”属性上定义的字段,并使用点概念获得“类别”对象的相应值。如果字段的值不是零和void,则使用磁性组件显示它,该组件包含字段字段的文本组件,以及字段值的另一个文本组件。如果有多个字段,它们将显示在网格上的其他列中。

简而言之,类别网络组件负责显示类别的详细信息,包括Panigan的标题和编辑按钮,以及类别本身的详细信息。 GenericDetailsite组件用于在网格中显示该类别的详细信息。这些组件一起提供了对类别细节的清晰而有条理的观点。

类别登陆范围

此文件实现了显示类别详细信息的拟合。它使用类别的尾尾,并以现金组件包围它,为pânão提供样式和空间。 Panigan还使用头部组件来定义标题和p的描述。 Panigan是如何使用原子设计组件来创建完整页面的一个示例。

import { Box, Head } from "shared/ui";
import { CategoryDetails } from "entidades/category/details";
import { CategoryProps } from "entidades/category";
type CategoryDetailsProps = {
  data: CategoryProps;
  id: string;
};
export const CategoryDetailsPage = ({ data, id }: CategoryDetailsProps) => {
  const props = { category: data };
  return (
    <>
      <Head
        title={"Belezix Admin | Categorias"}
        description="Página de detalhes de categorias do painel de Admin Belezix"
      />
      <Box flex="1" borderRadius={8} bg="purple.800" p="8">
        <CategoryDetails {...props} />
      </Box>
    </>
  );
};

这是一个类别详细信息的时候。 Panigan收到了两个属性:data和Koud4。 data属性包含类别中的所有信息,而id属性只是类别的标识符。

CategoryDetailsPage函数中,定义了一个包含category属性的props对象,该属性等于data。然后将一个盒子(Box)渲染,其中包含组件CategoryDetails通过categoryprops属性。 Head组件用于定义pânão的部分信息,例如标题和描述。

基本上,类别详细信息padga以过去类别作为CategoryDetails组件的属性显示,该属性又使用GenericDetailsItem组件以有组织的方式在表中以有组织的方式显示该类别的详细信息。

类别API

此文件包含一项服务,该服务可以调用ãapi以获取特定类别的详细信息。他使用客户端HTTP SetupApicLient来拨打呼叫,并将类别的详细信息返回为类别对象。如果在进行调用API时存在错误,则返回null。该服务负责寻求API数据以提供用户界面的组件。

export const getCategoryById = async (
  id: string,
  ctx: any
): Promise<CategoryProps | null> => {
  try {
    const { data } = await setupAPIClient(ctx).get("/category/load", {
      params: { _id: id },
    });
    if (!data) {
      return null;
    }
    return categoryModel(data).format();
  } catch (error) {
    return null;
  }
};

这是一种导出称为getCategoryById的函数的方式。此功能会收到两个参数:koud4和koud40。第一个是代表您要寻找类别的ID的字符串。第二个是上下文的对象,用于执行API的请求。

在该功能中,有一个呼叫kude41,该调用负责配置用于执行请求的客户端HTTP。此函数使用上下文对象在请求中添加身份验证令牌。

然后,制作了端点“/类别/负载”的获取申请,将类别的ID传递为URL中的parano。如果请求成功,则使用返回的data对象来创建categoryModel实例,该实例负责格式化更合适格式的数据。

如果请求失败或不会返回任何数据,则该函数返回null

简而

详细信息/[ID]

此文件是一个next.js padign,它使用getServersideProps函数将类别的详细信息从API获取,并将其传递到类别DeteTailSpage组件。 withsrauth的功能用于确保在访问垫子之前对用户进行身份验证。如果URL中提供的ID不是Vamilized字符串,则p。将返回错误404。Pânão是如何与Next一起使用原子设计组件。 >

import { CategoryDetailsPage } from "screens/category/details/CategoryDetailsPage";
import { getCategoryById } from "entidades/category/category.api";
import { GetServerSideProps } from "next";
import { withSSRAuth } from "shared/libs/utils";
export const getServerSideProps: GetServerSideProps = withSSRAuth(async (context) => {
  const id = context?.query?.id;
  if (!id || typeof id !== "string") {
    return {
      notFound: true,
    };
  }
  const data = await getCategoryById(id, context);
  return {
    props: {
      data,
      id,
    },
  };
});
export default CategoryDetailsPage;

这种方式是应用程序类别详细信息的一部分。当用户访问/details/[id]页面时,服务器执行getServerSideProps函数,该函数从URL中传递的id的类别中寻求数据。

getServerSideProps函数使用withSSRAuth实用程序来确保在携带PAM之前对用户进行身份验证。如果包含它,则将其重定向到登录。

如果id不是字符串或存在,则p。返回状态404(找不到)。

如果一切都正确,则调用getCategoryById函数从过去的Koud4类别中寻找数据。如果搜索成功,则将数据作为CategoryDetailsPage Pamin的属性返回。如果属性data为null,并且没有类别的信息,则将null和pânão加载。

包括£o

在此课程中,我们了解了使用UI脉轮和原子设计的类别细节的类别细节的创建。我们已经看到了如何创建由组成组成部分的Mollets,以及如何使用这些Mollets构建较大组件的方法,例如类别详细信息PAMY。

此外,我们了解了该地区成员的组织以及原子设计如何帮助创建更多可重复使用和可散发的组件。我们还看到了如何将该组织应用于真实项目的示例。

最后,我们看到了如何使用Next.js API来寻找服务器数据以及如何使用路由身份验证来控制对该数据的访问。我们希望这些概念已被捆绑在一起,并有助于了解如何在其项目中创建可重复使用,可扩展性和井井有条的组件。