将 prop 传递给样式组件

2024-01-09

我正在尝试找到一种方法来动态创建“居中此 div”组件。这段代码目前可以工作,但有点冗长而且不是很干:

const Rel = styled.div`
    position: relative;
    height: 100%;
    width: 100%;
    `

const Abs = styled.div`
    position: absolute;
    top: 50%;
    `

const LeftAbs = styled(Abs)`
    left: 0;
    transform: translateY(-50%);
`
const RightAbs = styled(Abs)`
    right: 0;
    transform: translateY(-50%);
`
const CenterAbs = styled(Abs)`
    left: 50%;
    transform: translate(-50%, -50%);
`


const Centered = ({ children, ...props }) => {

    let abs = <CenterAbs>{children}</CenterAbs>

    if (props.center) {
        abs = <CenterAbs>{children}</CenterAbs>
    } else if (props.left) {
        abs = <LeftAbs>{children}</LeftAbs>
    } else {
        abs = <RightAbs>{children}</RightAbs>
    }

    return (
        <Rel>
          {abs}
        </Rel>
    )


}

我想以不同的方式通过将 prop 传递到 Abs 组件来实现这一点,如下所示(如下所示),其中顶级元素 Centered 接收一个 prop,然后动态地将其传递到下面的组件中。

const Abs = styled.div`
    position: absolute;
    top: 50%;
    ${props => props.left ? "left: 0;" : "right: 0;"}
    `



const Centered = ({ children, ...props }) => {

    const { direction } = props

    return (
        <Rel>
          <Abs direction>{children}</Abs>
        </Rel>
    )

}

// ...passed into:
const Header = () => {
  return (
    <HeaderContainer>
      <Centered direction="left">
        <h1>Raph37</h1>
      </Centered>
    </HeaderContainer>
  )
}

这可能吗(或最佳实践)?我尝试了很多不同的方法,并且希望得到一些指导。


根据此,您所写的内容应该几乎可以工作,并且您的方法是执行此操作的正确方法之一section https://www.styled-components.com/docs/basics#adapting-based-on-props的文档。

With <Abs direction>,你正在通过direction = true。 这不是你想要的。修改它与<Abs direction={direction}>.

请注意,有时您不希望修改 UI 组件,您可以使用css支撑来自styled-component无论你在哪。例如,您可以这样做:

import styled, { css } from 'styled-components'

const Abs = styled.div`
    position: absolute;
    top: 50%;
`

const Centered = ({ children, direction }) =>
    <Rel>
      <Abs css={direction === 'left' ? css`left: 0;` : css`right: 0;`}>
        {children}
      </Abs>
    </Rel>
}

您可以找到有关以下内容的更多信息css支撑styled-component here https://medium.com/styled-components/announcing-native-support-for-the-css-prop-in-styled-components-245ca5252feb.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 prop 传递给样式组件 的相关文章

  • Javascript查找伪元素

    所以我一直在努力CSS 选择器引擎 https github com alpha123 Puma 并且我想支持伪元素 before after selection first line 等 我注意到 Slick Sizzle 和其他一些流行
  • 如何使用 CSS 在 HTML H2 之前添加数字?

    我正在努力创造一个好看的H2HTML 和 CSS 中的标题将允许我在实际标题文本之前有一个格式良好的数字 如下图所示 图像中的示例使用如下所示的 CSS 代码 效果很好 只是我无法在 HTML 中设置橙色圆圈中的数字值 h2 before
  • 在 Twitter Bootstrap 轮播中显示下一张和上一张图像

    我正在寻找一种在 Twitter Bootstrap 轮播中显示下一张和上一张幻灯片图像的方法 默认情况下 它只显示当前图像 如果我删除 display none css 属性 则轮播中的每个项目都在彼此下方 我尝试过使用 CSS 但还没有
  • CSS @supports (::伪元素)

    我想将区域更改为最大溢出 仅在以下情况下滚动 webkit scrollbar thumb是支持的 在纯 CSS 中这可能吗 看起来 supports只检查规则 不检查选择器 您现在可以使用 supports selector https
  • NEXT JS - 应用程序通过重写呈现两次

    我正在开发一个 NEXT JS 项目 但找不到两次渲染应用程序的解决方案 Problem 添加后rewrites to next config js App被渲染两次 如果移除 则渲染一次 next config js async rewr
  • 具有不同高度块的三列布局

    我有基于 Twitter Bootstrap 的简单 3 列布局 唯一的问题是 每根柱子都是由不同高度的块组装而成 div class container div class row div class span4 div class bl
  • 通过边框拖放调整 div 大小,无需添加额外的标记

    我有一个绝对定位的侧面板 我需要通过拖动此边框来更改其宽度 我还需要更改边框悬停上的光标 是否可以在不添加另一个 div 进行拖动的情况下做到这一点 这是标记 right panel position absolute border lef
  • 让右侧的 Div 填满所有可用空间

    我想创建两个并排的 div 但我希望左侧的 div 为 300px 右侧的 div 占据屏幕上的剩余部分 这怎么可能呢 谢谢 最直接的 我会说正确的 方法是使用display table wrapper display table widt
  • CSS 100% 高度在 React 应用程序中不起作用

    我试图在我的 React 应用程序中使用 Flexbox 创建一个简单的两列网页 占据整个宽度和高度 我可以让它单独使用 HTML 和 CSS 但不能在 React 应用程序中使用 到目前为止我有 root overflow x hidde
  • 调试 SSR node.js 服务器端 VSCode

    我在尝试调试 SSR React 应用程序 服务器端 时花费了太多时间 我们正在从头开始构建一个应用程序 这是一个非常大的项目 因此调试代码非常重要 服务器的 webpack 配置如下 const path require path con
  • 对于 Web 应用程序结构的最佳实践,您有哪些建议? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我在工作中做了很多定制应用程序 我正在尝试为新应用程序定义一些标准 有点像元素 CSS 你如何组织样式表 我是否应该为整个网站提供一个基本样式表
  • 如何在跨度上使用 CSS3 变换? [复制]

    这个问题在这里已经有答案了 我有一个行内元素 a span 嵌套在 h1 标签 我申请了一个转换财产给h1 skew所以它看起来像一个平行四边形 我需要转换 the span 标记以 矫正 它及其文本 但这似乎只适用于 IE Here is
  • 使用单个 shell 脚本运行 React 和 Flask

    我构建了一个使用 ReactJS 作为前端和 Flask 作为中间件的应用程序 我可以使用以下命令序列来执行它 npm start cd Equation Solver python m flask run 执行第一个命令后 我必须打开另一
  • height: calc(100%) 在 CSS 中无法正常工作

    我有一个 div 我想填充主体的整个高度减去设定的像素数 但我无法得到height calc 100 50px 上班 我想这样做的原因是我有一些元素具有基于一些不同标准的动态高度 例如标题的高度根据它可以包含的不同元素而变化 然后 内容 d
  • 如何在Vite配置中更改antd主题?

    是一个由Vite和React antd组成的项目 我想在 vite config ts 中动态处理 antd 主题 如果您能告诉我如何修改 React 组件中的 less modifyVars 值 我将不胜感激 这是当前屏幕 光状态 htt
  • 如何在sessionStorage中保存Mobx状态

    试图从根本上实现这一点https github com elgerlambert redux localstorage https github com elgerlambert redux localstorage这是针对 Redux 的
  • CSS Hex 到速记十六进制转换

    将十六进制转换为速记十六进制的正确算法是什么 例如 996633很容易被转换为 963 但如果是这样怎么办 F362C3 我的第一个猜测是我只取每种颜色的第一个值并使用它 所以 F362C3变成 F6C 但我不知道如何从数学上证明这种方法的
  • -moz-变换 z-index 错误?

    In 这个测试用例 http jsfiddle net MZ7PX 没有 moz transform rotate 31deg 黄色框是可见的 它应该是可见的 但是如果我添加这个 尽管有一个黄色框是不可见的z index of 999 Wh
  • npx create-react-app myapp 命令抛出错误

    我想在 React 中创建一个应用程序 我已经安装了最新的 Node js 当我运行命令时出现错误 PS C Users Kumar Sanket Desktop React Redux gt npx create react app my
  • 带有无序列表的 Flexbox

    我正在尝试学习 Flexbox 我真的很喜欢它 我正在尝试 玩动态宽度 当我这样做时div它有效 如果我尝试这样做li 它也不起作用 我的代码已上线codepen http codepen io jrock2004 pen pjvZJd d

随机推荐

  • 类似的图片搜索软件(如TinEye)

    在我们的社区网站之一中 我们允许用户上传图像 这些图像由我们的版主批准或拒绝 为了限制管理员所需的工作 我们希望将每张被拒绝的图片 记录 到某种数据库中 并在提交图像以供批准之前在此数据库中进行查找 如果类似的图片已被拒绝 则上传的图片将不
  • 在VBA中,如何以简单的方式将UTC UNIX时间戳转换为本地时区日期?

    据我所知 我们可以使用下面的方法将 UNIX 时间戳粗略地转换为 VB 日期 CDate UNIX 时间戳 60 60 24 1 1 1970 但是 不考虑时区和日光信息 时区并不是什么大问题 但我无法获取特定 UNIX 时间戳的夏令时偏差
  • 获取一个月中的第一个或最后一个星期五

    我正在尝试编写这样的日历函数 function get date month year week day direction week是一个整数 1 2 3 day 是一天 Sun Mon 或数字 以更简单的为准 方向有点令人困惑 因为它进
  • 如何发送utf-8电子邮件?

    请问如何发送utf 8电子邮件 import sys import smtplib import email import re from email mime multipart import MIMEMultipart from ema
  • Tomcat 7.0.32 +Spring MVC Servlet 3 异步不起作用

    我编写了非常简单的控制器来测试 Servlet 3 功能 Autowired ThreadPoolTaskExecutor taskExecutor RequestMapping value name method RequestMetho
  • Spring Security WebFlux IP 白名单

    在利用 WebFlux 的最新 Spring Security 中 安全配置的工作方式如下 SecurityWebFilterChain springSecurityFilterChain ServerHttpSecurity http h
  • 如何使用boto3通过s3上的url访问图像?

    我想要完成的是生成一个链接来查看文件 例如图像或pdf 该项目无法通过 URL 访问 https 存储桶 s3 amazonaws com img name jpg https 5Bbucket 5D s3 amazonaws com im
  • getItemAtPosition() 如何从 ListView 中的选定项获取可读数据

    我有一个从 Android ContactManager 示例中获取的联系人列表视图 该列表显示正常 但我不知道如何从所选项目中获取信息 例如 姓名 和 电话号码 我可以获得选定的位置 但 mContactList getItemAtPos
  • 当我们只更新一个属性时,我们应该使用强参数吗?

    我正在开发一个 Rails 应用程序 我有几个操作 delete later ban later 等 其中我只从请求参数中设置一个属性 具体来说 reason执行该操作的字段 我想知道这样做是否可以 def ban later object
  • 转换数据库中嵌入的图片

    我有一个 小 问题 在数据库文档中包含富文本字段 富文本字段包含某个联系人的个人资料图片 问题是这个内容没有保存为 mime 因此我无法计算图像的 url 我正在使用 pojo 从人员配置文件中检索数据 并在我的 xpage 控件中使用它来
  • 编写正则表达式来检测重复字符[重复]

    这个问题在这里已经有答案了 我需要编写一个正则表达式 它可以识别一个具有重复字符集 at the end 根据以下代码片段 重复字符集为An 我需要编写一个正则表达式 以便能够发现并显示它 根据下面的代码 w将匹配任何单词字符 包括数字 字
  • 如何将 Bower 用作 Visual Studio 2013 的包管理器? IE。我有一个 .NET 项目,想要添加一些使用 Bower 的包

    如何将 Bower 用作 Visual Studio 2013 的包管理器 IE 我有一个 NET 项目 想要添加一些使用 Bower 的包 I read 斯科特 汉塞尔曼的帖子 http www hanselman com blog In
  • 数据表添加到数据集

    我需要为数据集设置一个表 DataSet ds EventDal GetEvents DataSet dsReturn new DataSet DataTable dtReturn dsReturn Tables Add dtReturn
  • 子域 Azure WebApp

    这是一个更普遍的问题 我有一个作为 Azure 应用服务运行的网站 我配置了一个自定义域 以便您可以通过以下方式调用它我的网站名称 com 随着客户的要求不断增长 每个客户都有特定的需求 我想知道是否可以为每个客户拥有一个子域 例如 cli
  • pandas + pyodbc ODBC SQL 类型 -150 尚不支持

    我知道这方面有很多主题 但我认为这是非常具体的 我得到用于审计目的的当前代码 import pandas as pd import pyodbc query Top 50 high total CPU Queries SELECT TOP
  • 在 nginx 上为应用程序添加上下文路径

    Nginx 负责从根目录到根 URL 的所有静态内容 例如 如果根内容位置配置为 usr share nginx html其中包含一个文件 usr share nginx html foo html 然后是网址http localhost
  • Zope 冲突错误

    我的网站的 zope 日志报告了许多冲突错误 平均每天120个 其中2 3个未解决 我读过很多关于为什么会发生冲突错误的文章 但没有什么是清楚的 大多数冲突错误发生在对 MySQL 数据库运行选择查询的页面上 据称 随着 http 请求并发
  • 开始 Lua 脚本编写 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正处于被迫学习Lua的阶段 所以你对我如何做到这一点有什么建议吗 除了 PHP 之外 我对其他脚本语言没有太多经验 那么 关于 head
  • django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。 (django 2.0.1)(Python 3.6)

    这是我第一次尝试将 Django 应用程序 django 2 0 1 Python 3 6 部署到 pythonanywhere 它是一个简单的组合应用程序 没有模型 没有引导程序 只需 Django HTML CSS 和 JavaScri
  • 将 prop 传递给样式组件

    我正在尝试找到一种方法来动态创建 居中此 div 组件 这段代码目前可以工作 但有点冗长而且不是很干 const Rel styled div position relative height 100 width 100 const Abs