javascript 如何将map函数中的数据放到样式化的组件中?[duplicate]

anauzrmj  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(70)
    • 此问题在此处已有答案**:

Passing in parameter to Styled Components(3个答案)
1小时前关闭。
我正在练习如何使用Map功能。
我做了一个json文件,我想显示每个数据使用Map功能。
数据交得很好。但问题是展示图像的方式。
图像在一个文件中,显示图像的方式是使用background-position显示图像的一部分。
为了做到这一点,我把taget 'background-position'的数字到json文件。

  • 疑问 *

但我不知道怎么传递这个。我试着编代码,但没用。
我认为把值传递给样式化组件的方法是错误的,我怎么能显示不同的图像呢?
有问题的地方是id为list__img的地方。
如果看到代码跨度,您将更容易理解代码。

    • 代码**
import { useState } from "react";
import styled from "styled-components";
import dummy from "./database/DB.json";

export default function App() {
  const [data, setData] = useState(dummy.products);

  return (
    <Wrap>
      <div className="characterList">
        <div className="word">
          <h2 className="word__font">Like Pick!</h2>
        </div>
        <div className="list">
          <ul className="list__ul">
            {data.map((item) => {
              return (
                <div className="list__box">
                  <Card key={item.id} item={item} />
                </div>
              );
            })}
          </ul>
        </div>
      </div>
    </Wrap>
  );
}

// I think I need to deliver the value here
function Card({ item }) {
  return (
    <div className="list__wrap">
      <div className="list__img" />
      {item.nameKr}
    </div>
  );
}

const Wrap = styled.div`
  border: 1px solid black;
  position: relative;
  top: calc(50vh - 100px);
  width: 1200px;
  display: inline-flex;

  .characterList {
    border: 1px solid red;
  }

  .word {
    margin: 0 auto;
    width: 1200px;
  }

  .word__font {
    font-family: "SFCompactDisplay-Bold", sans-serif;
    font-weight: bold;
    font-size: 38px;
    margin-bottom: 25px;
    text-align: center;
  }

  .list {
    border: 3px solid grey;
    margin: 0 auto;
    width: 1200px;
    padding-bottom: 20px;
  }

  .list__ul {
    display: inline-flex;
    list-style: none;
  }

  .list__box {
    margin: 0 9px;
    text-align: center;
    font-size: 17px;
  }

  .list__wrap {
    color: #333;
    font-size: 13px;
    display: inline-block;
    text-align: center;
  }

  .list__img {
    background-image: url(https://www.kakaofriendsgolf.com/img/v3_img_sprites_friends@3x.png);
    background-repeat: no-repeat;
    width: 70px;
    height: 70px;
    background-size: 100%;
    margin-bottom: 5px;
    /* this part is the problem */
    background-position: 0 {item.position}%;
  }
`;
    • 数据库**
{
  "products": [
    {
      "id": "1",
      "name": "choosik",
      "nameKr": "춘식이",
      "position": 17.647059
    },
    {
      "id": "2",
      "name": "ryan",
      "nameKr": "라이언",
      "position": 88.235295
    },
    {
      "id": "3",
      "name": "apeach",
      "nameKr": "어피치",
      "position": 5.882353
    }
  ]
}
    • 代码跨度**

https://codesandbox.io/s/characterselectmap-t2mqef?file=/src/App.js:0-1990

dzjeubhm

dzjeubhm1#

可以将参数传递到已设置样式的构件中。
但是你这样做是行不通的。
将“list__img”分离到新的样式化组件中,然后您就可以访问这些 prop 了。
也可以设置内联样式

<div className="list__img" style={{backgroundPosition: `0 ${item.position}%`}} />

相关问题