代码之家  ›  专栏  ›  技术社区  ›  Corcor

具有映射数据的动态样式组件

  •  0
  • Corcor  · 技术社区  · 4 年前

    我试图在JSON中拉入一个JSON数据,它基本上看起来像这样:

    "items": [
      {
        "id": "1",
        "title": "data header one",
        "bgColor": "dark",
        "buttonColor": "red",
        "shadow": false,
        "offset": 1,
        "padding": 0,
      },
      {
        "id": "2",
        "title": "data header two",
        "bgColor": "light",
        "buttonColor": "black",
        "shadow": false,
        "offset": 1,
        "padding": 0,
      }
    ]
    

    我试图通过使用以下命令将这些数据映射到next.js函数组件中 map() .

    我努力想知道如何通过 items 将“padding”、“buttonColor”或“bgColor”等数据返回到返回渲染之外的样式化组件中。有没有一种不使用内联样式的方法?

    我的回报设置如下:

    return (
      <>
      {items.map(({id, title, bgColor, buttonColor, shadow, padding}) => {
        return (
        <Cta key={id}>
          <Div>
          {title}
          </Div>
        </Cta>
        )}}
      </>
    );
    

    我的样式化组件设置如下:

    const Cta = styled.div`
      background: ${bgColor};
      h4 {
      font-weight: bold;
      padding: ${padding}px;
      }
    `;
    

    我已经减少了代码,所以不用在意未使用的数据。

    1 回复  |  直到 4 年前
        1
  •  0
  •   macborowy    4 年前

    以下是如何使用对象属性进行样式设置:

    import React from "react";
    import styled from "styled-components";
    
    export default function App() {
      const Cta = styled.div`
        background: ${props => props.bgColor};
        h4 {
          color: blue;
          font-weight: bold;
          padding: ${props => props.padding}px;
        }
      `;
    
      const elements = items.map(item => (
        <Cta key={item.id} bgColor={item.buttonColor} padding={item.padding}>
          <h4>Heading</h4>
          {item.title}
        </Cta>
      ));
    
      return <div className="App">{elements}</div>;
    }
    
    const items = [
      {
        id: "1",
        title: "data header one",
        bgColor: "dark",
        buttonColor: "red",
        shadow: false,
        offset: 1,
        padding: 10
      },
      {
        id: "2",
        title: "data header two",
        bgColor: "light",
        buttonColor: "black",
        shadow: false,
        offset: 1,
        padding: 0
      }
    ];
    

    在这里,您可以阅读更多关于使用组件传递数据进行样式设置的信息 props : https://styled-components.com/docs/basics#adapting-based-on-props