如何使用道具为React Component动态构建对象?

学徒

我将组件粘贴到下面,该组件输出6个项目的网格。这6个项目当前被硬编码为gridItems。

我想了解如何使该组件动态化。我可以通过道具告诉组件要渲染的项目(设计师,经理等)。

当前,该组件将输出6个项目。我该怎么做呢?

<RoleCardGrid designer manager />

仅使用2个项目渲染组件。

范例2:

<RoleCardGrid designer manager doctor sales />

仅使用4个项目渲染组件。

感谢您的帮助。

这是我当前的组件:

import React from 'react';
import RoleCard from 'components/RoleCard';

let gridItems = [
  { roleTitle: "designer",
    linkTo: "example.com",
    description: "Desc goes here",
  },
  { roleTitle: "manager",
    linkTo: "example.com",
    description: "Desc goes here",
  },
  { roleTitle:"freelancer",
    linkTo: "example.com",
    description: "Desc goes here",
  },
  { roleTitle:"engineer",
    linkTo: "example.com",
    description: "Desc goes here",
  },
  { roleTitle:"doctor",
    linkTo: "example.com",
    description: "Desc goes here",
  },
  { roleTitle:"sales",
    linkTo: "example.com",
    description: "Desc goes here",
  }
];

function renderGridItems(items) {
  let rendered = items.map((item, index) => {
    return (<div key={`gridItem-${index}`}>
      <RoleCard
        key={`roleGridItem-${index}`}
        roleTitle={item.roleTitle}
        linkTo={item.linkTo}
        description={item.description}
      />
    </div>);
  });
  return rendered;
}

const RoleCardGrid = () => (
  <Grid
    maxColumns={[1, 2, 2]}
    gridGap={[40, 40, 40]}
    maxWidth={[null, 760, 760]}
    rcLabel="rolePages"
  >
    {renderGridItems(gridItems)}
  </Grid>
);


export default RoleCardGrid;
马丁

您可以为每个角色引入标志属性,也可以为每个角色公开专用的RoleCard组件。标记看起来会有所不同。我将快速介绍两种解决方案:

标记属性

// each role can only be shown once
// fixed order of roles

//usage
<RoleCardGrid designer manager doctor sales />

//metadata
const gridItems = {
  designer: { roleTitle: "designer", linkTo: "example.com", reasoning:"Desc goes here" },
  doctor: { roleTitle: "doctor", linkTo: "example.com", reasoning:"Desc goes here" },
  // etc... add all roles here ...
};

//component
const RoleCardGrid = ({designer, manager, doctor, sales, freelancer, engineer}) => {

  return (
    <Grid
      maxColumns={[1, 2, 2]}
      gridGap={[40, 40, 40]}
      maxWidth={[null, 760, 760]}
      rcLabel="rolePages"
    >
      {designer && <RoleCard {...gridItems.designer} />}
      {manager && <RoleCard {...gridItems.manager} />}
      {doctor && <RoleCard {...gridItems.doctor} />}
      {sales && <RoleCard {...gridItems.sales} />}
      {freelancer && <RoleCard {...gridItems.freelancer} />}
      {engineer && <RoleCard {...gridItems.engineer} />}
    </Grid>
  );
};

专业的RoleCard组件

// each role can occur more than once
// order of roles can be varied

//usage
<RoleCardGrid>
  <RoleCardGrid.Designer />
  <RoleCardGrid.Manager />
  <RoleCardGrid.Doctor />
  <RoleCardGrid.Sales />
<RoleCardGrid>

//metadata
const gridItems = {
  designer: { roleTitle: "designer", linkTo: "example.com", reasoning:"Desc goes here" },
  doctor: { roleTitle: "doctor", linkTo: "example.com", reasoning:"Desc goes here" },
  // etc... add all roles here ...
};

//component
const RoleCardGrid = ({ children }) => {

  return (
    <Grid
      maxColumns={[1, 2, 2]}
      gridGap={[40, 40, 40]}
      maxWidth={[null, 760, 760]}
      rcLabel="rolePages"
    >
      {children}
    </Grid>
  );
};

RoleCardGrid.Designer = () => (<RoleCard {...gridItems.designer} />);
RoleCardGrid.Manager = () => (<RoleCard {...gridItems.manager} />);
RoleCardGrid.Doctor= () => (<RoleCard {...gridItems.doctor} />);
RoleCardGrid.Sales = () => (<RoleCard {...gridItems.sales} />);
RoleCardGrid.Freelancer = () => (<RoleCard {...gridItems.freelancer} />);
RoleCardGrid.Engineer = () => (<RoleCard {...gridItems.engineer} />);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Powershell:如何动态构建数组或对象?

来自分类Dev

使用Javascript对象动态构建HTML表

来自分类Dev

使用Javascript对象动态构建HTML表

来自分类Dev

如何使用angularjs构建动态json对象数组?

来自分类Dev

如何注入React Component道具?

来自分类Dev

使用Q对象在Django中动态构建复杂查询

来自分类Dev

Javascript / nodejs使用嵌套数组动态构建JS对象

来自分类Dev

如何使用 React 为 UAT 环境构建?

来自分类Dev

如何使用动态构建的 lambda 表达式创建和填充动态对象

来自分类Dev

如何在 React Native 中为样式对象添加道具验证?

来自分类Dev

如何使用对象中给定的数据构建动态href链接(Node.js && handlebars)

来自分类Dev

如何构建动态UIPageViewController

来自分类Dev

如何将道具验证为对象数组?

来自分类Dev

动态构建复杂对象

来自分类Dev

单元测试期间如何更新React Component道具?

来自分类Dev

如何使用React在handleChange上构建嵌套对象?

来自分类Dev

尝试使用动态道具渲染相同的React组件(道具来自json文件)

来自分类Dev

React-Native — 使用 Promise 为 API 请求构建动态 URL

来自分类Dev

使用JMESpath构建对象

来自分类Dev

如何使用Bootstrap构建动态搜索框

来自分类Dev

如何使用jQuery构建动态菜单?

来自分类Dev

如何使用linq构建动态查询

来自分类Dev

如何构建动态 MongoDB 查询

来自分类Dev

如何使用React Hooks推送到动态对象内部的数组?

来自分类Dev

使用剔除动态构建HTML

来自分类Dev

使用片段构建动态UI

来自分类Dev

如何使用Vue在子组件中使用对象道具?

来自分类Dev

如何使用按钮道具动态禁用antd模式按钮

来自分类Dev

如何动态为RedBeanPHP 4构建参数化查询?

Related 相关文章

热门标签

归档