如何使这个组件在 React 中循环(通过计算它接收的 props 并进行一些计算并具有静态标题)

发布于 2025-01-13 08:12:53 字数 698 浏览 3 评论 0原文

我有以下 3 个列表项。它们每个都使用相同的组件但不同的计算:

<ListItem title={'Product 1'} tag={tag} calculatedVal={getCalculatedVal(props.data.price1, props.data.price2)}
isMore={props.data.price1 >= props.data.price2}
handleClick={open}
/>
<Underline />
<ListItem title={'Product 2'} tag={tag} calculatedVal={getCalculatedVal(props.data.price1, props.data.price3)}
isMore={props.data.price1 >= props.data.price3}
handleClick={open}
/>
<Underline/>
<ListItem title={'Product 3'} tag={tag} calculatedVal={getCalculatedVal(props.data.price1, props.data.price4)}
isMore={props.data.price1 >= props.data.price4}
handleClick={open}
/>

如何通过循环将其转换为 1 个组件?

I have the following 3 list items. Each of them uses the same component but different calculations:

<ListItem title={'Product 1'} tag={tag} calculatedVal={getCalculatedVal(props.data.price1, props.data.price2)}
isMore={props.data.price1 >= props.data.price2}
handleClick={open}
/>
<Underline />
<ListItem title={'Product 2'} tag={tag} calculatedVal={getCalculatedVal(props.data.price1, props.data.price3)}
isMore={props.data.price1 >= props.data.price3}
handleClick={open}
/>
<Underline/>
<ListItem title={'Product 3'} tag={tag} calculatedVal={getCalculatedVal(props.data.price1, props.data.price4)}
isMore={props.data.price1 >= props.data.price4}
handleClick={open}
/>

How can be this converted into 1 component with the loop?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

混吃等死 2025-01-20 08:12:53

从您的代码中不清楚声明 taggetCalculatedValuecolor 等。

但这里有一个基本方法。将列表项道具移至数组中,并使用映射来渲染每个列表项。

import ListItem from "./somewhere/ListItem";
import Underline from "./somewhere/Underline";
import { getCalculatedVal } from "./somewhere/getCalculatedVal";

const PRICES = ["price2", "price3", "price4"];

export const MyComponent = ({ data, ...props }) => {
  const listItems = PRICES.map((price) => {
    return {
      calculatedVal: getCalculatedVal(data.price1, data[price]),
      isMore: data.price1 >= data[price],
      key: price,
    };
  });

  return listItems.map((listItemProps) => {
    return (
      <>
        <Underline color={props.color} />
        <ListItem
          title={"Product 1"}
          tag={props.tag}
          handleClick={props.open}
          {...listItemProps}
        />
      </>
    );
  });
};

It's not clear from your code where tag, getCalculatedValue, color, etc. are declared.

But here's a basic approach. Move your list item props into an array and use a map to render each list item.

import ListItem from "./somewhere/ListItem";
import Underline from "./somewhere/Underline";
import { getCalculatedVal } from "./somewhere/getCalculatedVal";

const PRICES = ["price2", "price3", "price4"];

export const MyComponent = ({ data, ...props }) => {
  const listItems = PRICES.map((price) => {
    return {
      calculatedVal: getCalculatedVal(data.price1, data[price]),
      isMore: data.price1 >= data[price],
      key: price,
    };
  });

  return listItems.map((listItemProps) => {
    return (
      <>
        <Underline color={props.color} />
        <ListItem
          title={"Product 1"}
          tag={props.tag}
          handleClick={props.open}
          {...listItemProps}
        />
      </>
    );
  });
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文