首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应映射和组件化的复杂性

反应映射和组件化的复杂性
EN

Stack Overflow用户
提问于 2019-02-26 23:01:31
回答 2查看 34关注 0票数 0

我正在努力映射我重复的<listItem>,因为这些项之间存在额外的差异。它们引入不同的const,并根据它表示的项执行不同的逻辑。

https://codesandbox.io/s/pj0yk6z91x

代码语言:javascript
复制
      <ListItem dense={this.props.dense} alignItems="flex-start">
        <ListItemText
          primary={
            <React.Fragment>
              Predicted score - <strong>4 Weeks</strong>
            </React.Fragment>
          }
          secondary={
            <React.Fragment>
              <Typography component="span" color="textPrimary">
                Predicted date{" "}
                <i
                  style={{ "font-size": "1em" }}
                  className="zmdi zmdi-calendar mx-2"
                />{" "}
                {moment(data.vulnerabilityDate)
                  .add(4, "weeks")
                  .format("MMM DD, YYYY")}
              </Typography>
            </React.Fragment>
          }
        />
        <ListItemSecondaryAction>
          <span
            style={{
              "font-size": "1rem",
              "background-color": status4WeeksColor,
              "min-width": "45px"
            }}
            className="vulnerability badge badge-primary"
          >
            {data.status4Weeks}
          </span>
        </ListItemSecondaryAction>
      </ListItem>

我想将其与以下内容相对应:

代码语言:javascript
复制
const data = {
  status4Weeks: "2",
  status8Weeks: "3",
  status12Weeks: "4"
};

这看起来不是一个太大的挑战,但我也希望每个标题都有一个独特的值,而不是在4周、8周、12周的数据有效负载中。此外,每个值都可能有一个与我已经映射的值相关联的单独颜色:

代码语言:javascript
复制
const status4WeeksColor = COLORS[data.status4Weeks];
const status8WeeksColor = COLORS[data.status8Weeks];
const status12WeeksColor = COLORS[data.status12Weeks];

所以需要考虑到这些都是不同的:

代码语言:javascript
复制
{data.status4Weeks}
status4WeeksColor
.add(4, "weeks")
<strong>4 Weeks</strong>

不知道从哪里开始!帮助?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-26 23:19:26

看起来你只需要正确地定义你的数据。您希望映射ListItemsarray。这些ListItem中的每一个都有titlestatusWeekcolor,以及numWeeks

在这种情况下,您的数据应该是具有这些属性的对象的数组。例如:

代码语言:javascript
复制
const data = [
{title: '4 Weeks', statusWeek: '2' , color: 'red', numWeeks: 4},
{title: '12 Weeks', statusWeek: '4' , color: 'blue', numWeeks: 12}]

然后,当你这样做的时候

代码语言:javascript
复制
data.map(el => <ItemList {...el} />)

ItemList使用四个props (颜色、标题、状态、周数)接收数组中的每个元素,因此只需将它们插入需要它们的组件中,如下所示(请注意这些属性):

代码语言:javascript
复制
<ListItem dense={this.props.dense} alignItems="flex-start">
        <ListItemText
          primary={
            <React.Fragment>
              Predicted score - <strong>{this.props.title}</strong>
            </React.Fragment>
          }
          secondary={
            <React.Fragment>
              <Typography component="span" color="textPrimary">
                Predicted date{" "}
                <i
                  style={{ "font-size": "1em" }}
                  className="zmdi zmdi-calendar mx-2"
                />{" "}
                {moment(data.vulnerabilityDate)
                  .add(this.props.numWeeks, "weeks")
                  .format("MMM DD, YYYY")}
              </Typography>
            </React.Fragment>
          }
        />
        <ListItemSecondaryAction>
          <span
            style={{
              "font-size": "1rem",
              "background-color": this.props.color,
              "min-width": "45px"
            }}
            className="vulnerability badge badge-primary"
          >
            {this.props.statusWeek}
          </span>
        </ListItemSecondaryAction>
</ListItem>

这是另一种处理数据/道具的方法,我不知道这是否适用于你。

干杯!

票数 0
EN

Stack Overflow用户

发布于 2019-02-26 23:18:23

我不确定我是否理解了你的问题,所以这可能不是你要找的。

与为每个数据对象值构建颜色映射的方法相同,您也可以为每个数据对象值创建操作映射。然后,可以遍历data对象的不同值,并使用COLORACTION映射来确定如何处理您的值

代码语言:javascript
复制
const ACTIONS = {
  '2': function () { /* do something */ },
  '3': function () { /* do something else */ },
};
代码语言:javascript
复制
{Object.values(data).map((type) => (
  <ListItem key={type}>
    <p>Predicted score: {type} weeks</p>
    <p
      style={{ backgroundColor: COLOR[type] }}
      onClick={ACTIONS[type].bind(this)}
      >
      {type}
    </p>
  </ListItem>
)}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54888414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档