React styled-components(三)—— 高级特性

2023-05-16

styled-components 高级特性

  • 样式继承
  • 嵌套
  • 设置主题

样式继承

新建 Demo.js 文件:

import React, { Component } from 'react'
import styled from 'styled-components';

const CustomStyle = styled.div`
    p {     
      color: red;
    }
`

const ContextBox = styled(CustomStyle)`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

class Home extends Component {
  render () {
    return (
      <div>
        <ContextBox>
          <p>Hello World, this is my first styled component!</p>
          <p>11111111111</p>
          <p>22222222222</p>
          <p>33333333333</p>
        </ContextBox>
      </div>
    )
  }
}
export default Home

App.js 中引入 Demo.js 文件:

// import logo from './assets/images/logo.svg';
import './assets/css/App.css';
import Demo from './components/Demo'

function App () {
  return (
    <div className="App">
      <header className="App-header">
        {/* <img src={logo} className="App-logo" alt="logo" /> */}
        <p>
          文字 <code>src/App.js</code> Hello World!.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          https://reactjs.org
        </a>
      </header>
      <Demo />
    </div>
  );
}

export default App;

页面效果:
在这里插入图片描述

编译后它们会使用不同的 className,如下图:
在这里插入图片描述

嵌套

& 符号表示引用主组件,示例:

import React, { Component } from 'react'
import styled from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    font-size: 20px;
    /* 应用于className为blue的ContextP组件 */
    &.blue{
      color: blue;
    }

    /* 应用于className为red的ContextP组件里的所有子组件或者html标签 */
    .red {
      color: red;
    }
`

class Home extends Component {
  render () {
    return (
      <ContextBox>
        <ContextP className="blue">11111111111</ContextP>
        <ContextP><p className="red">22222222222</p></ContextP>
        <ContextP><p>33333333333</p></ContextP>
      </ContextBox>
    )
  }
}
export default Home

页面效果:
在这里插入图片描述

& 还有别的用处,示例:

import React, { Component } from 'react'
import styled from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    font-size: 20px;
    & {
      color: blue;
    }
    &&{
      color: purple;
    }

    /* 应用于className为red的ContextP组件里的所有子组件或者html标签 */
    .red {
      color: red;
    }
`

class Home extends Component {
  render () {
    return (
      <ContextBox>
        <ContextP>11111111111</ContextP>
        <ContextP><p className="red">22222222222</p></ContextP>
        <ContextP><p>33333333333</p></ContextP>
      </ContextBox>
    )
  }
}
export default Home

最终效果如下所示,一个 & 就代表一个 class 权重也就是说最后颜色会渲染 purple ,原因是 ContextP 被作用于了 .sc-csCMJt .bBDcsi 样式表。
在这里插入图片描述

这个功能非常有用,比如在使用第三方组件想要覆盖它的样式的时候,可以加多个 & 来提高样式权重,从而覆盖第三方组件的样式。

& 还可以被用作上下文选择符:

import React, { Component } from 'react'
import styled from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    font-size: 20px;

    /* 应用于紧邻ContextP组件的下一个ContextP组件 */
    & + &{
      color: blue;
    }

    /* 应用于className为red的ContextP组件里的所有子组件或者html标签 */
    .red {
      color: red;
    }
`

class Home extends Component {
  render () {
    return (
      <ContextBox>
        <ContextP>11111111111</ContextP>
        <ContextP>33333333333</ContextP>
        <ContextP><p className="red">22222222222</p></ContextP>
      </ContextBox>
    )
  }
}
export default Home

页面效果:
在这里插入图片描述

设置主题

styled 支持设置主题,来达到共享样式的目的。

修改 Demo.js 文件:

import React, { Component } from 'react'
import styled, { ThemeProvider } from 'styled-components';

const ContextBox = styled.div`
    width: 800px;
    height: 200px;
    margin: 0 auto;
`

const ContextP = styled.h3`
    color: ${props => props.theme.themeColor};
    font-size: ${props => props.theme.fontSize};
`

class Home extends Component {
  render () {
    return (
      <ThemeProvider theme={{ themeColor: 'red', fontSize: '20px' }}>
        <ContextBox>
          <ContextP>11111111111</ContextP>
          <ContextP>22222222222</ContextP>
          <ContextP>33333333333</ContextP>
        </ContextBox>
      </ThemeProvider>
    )
  }
}
export default Home

页面效果:
在这里插入图片描述

可以看到,h3 标签的颜色和字体大小都设置成了 theme 指定的样式。

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

React styled-components(三)—— 高级特性 的相关文章

  • 如何在 WPF 中的 DatePicker 中获取日历

    我需要参考Calendar in a DatePicker object 我想象这很容易 DatePicker datePicker new DatePicker Calendar calendar datePicker Calendar
  • React 错误边界无法捕获错误

    我创建了我的反应应用程序vite在那里我有我的自定义反应错误边界组件从组件包装 事情是它无法捕获错误 我调试我的错误组件 但它无法接收任何值getDerivedStateFromError not componentDidCatch 这是我
  • CBuilder/Delphi 的 HTML 编辑器

    我需要为 C Builder 5 找到基本的所见即所得 HTML 编辑器组件 以便用户创建一些简单的文本 我将其粘贴到现有的 HTML 页面模板中 只是一个简单的支持来创建链接 添加图像 使用标题 粗体 斜体 您可以将 TWebBrowse
  • 温莎城堡:如何更新组件注册

    如果我在配置中定义了 container Register Component For
  • Spring:正确设置@ComponentScan

    我为我的设置进行了以下设置Spring Application Context Configuration public class RmiContext Bean public RmiProxyFactoryBean service Rm
  • 如何在 React 中重定向到外部链接?

    我正在构建一个画廊 您单击图像 它将使用 props 加载到单独的组件中 该图像是一个 URL 取自数组 其中 src 属性通过 CSS 作为背景图像加载 我的挑战是将 src 数据连接到子组件 查看原始问题 https stackover
  • Delphi 2010/Delphi XE 的免费软件 ZIP 组件?

    你知道有什么免费的组件 与Delphi兼容吗2010 or XE管理ZIP档案 实际上 只需要读取档案内容并提取文件 请不要使用测试版 我考虑过 ComponentAce 的 ZipForge 但它仅免费供个人使用 不允许分发软件 您可以从
  • 将 jzy3d.canvas 转换为 awt.component

    我需要将 jzy3d 画布转换为 java awt component 我想使用 JCombobox 和按钮在框架中显示图表 但是当我想将画布转换为组件时 程序被删除 谢谢您的回答 我已经尝试过this https stackoverflo
  • Angular CLI - 如何在可重用组件中引用图像路径

    需要帮助弄清楚如何将图像包含在另一个应用程序引用的可重用组件中 例如 我有一个 Angular 应用程序 我们称之为 UI Common 它包含通用组件 另一个 Angular 应用程序 我们称之为 Command Center 它将使用这
  • React-router 不会在不同路径上重新挂载组件

    我的反应应用程序中有一个组件 它是一个表单 该表格用于创建新许可证或编辑现有许可证 无论哪种方式 它都只是一个组件 它会检查 componentDidMount 是哪个 pageType 添加 更新 现在我的问题是 当我使用表单编辑许可证
  • AppComponent中的错误无法用作入口组件

    嘿 我是使用 Angular 和 Web 开发的新手 我已经浏览了一些教程 当尝试合并使用我的 Firebase 数据库时 在本地编译 使用 ng 服务 时 我的应用程序失败 返回 AppComponent不能用作入口组件 如果您能提供任何
  • 如何在 Angular 4 中创建分页组件? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个 API 端点 例如 list students page 5 rows 10带分页参数page and size 我想创建一个 a
  • 用于创建具有合并功能的电子邮件模板的良好库

    我正在寻找一个非常好的库 组件 框架来为我的网络应用程序创建电子邮件模板 我们定期发送一些电子邮件 激活你的帐号 Welcome 感谢您的订单 Etc 我想为我的网络应用程序的非技术管理员提供一种方法 查看当前的电子邮件模板 HTML 所见
  • 修改VCL组件代码

    我需要更改组件中的功能 当您收到 您无法覆盖此 消息 或者您需要更改私有方法中的代码 基类中不存在该方法 消息 导致组件无法下降时 您该怎么办 如果我遇到这个问题 我首先尝试从组件或其 CustomXXX 祖先继承 看看是否可以解决问题 如
  • React 显示 0,而不是使用短路 (&&) 条件组件显示任何内容

    我有以下简单的短路语句 应该显示一个组件或不显示任何内容 profileTypesLoading
  • 如何在.NET MAUI 中创建可重用组件?

    我最近刚刚开始使用 Net MAUI 但现在我想知道如何使用一段代码 例如我的所有页面上都有一个自制的导航栏 因为在所有 10 个页面上编写相同的代码是没有意义的 我想知道是否有办法创建一个可以像 React 或 Angular 一样重用的
  • 反应孩子与父母的沟通问题

    我正在构建一个猜谜游戏 其中问题和选择逻辑位于名为 问题 的组件中 我无法让应用程序读取问题代码 我希望应用程序中的状态根据子组件中的选择进行更新 我一直在尝试对解决方案进行逆向工程ReactJS中如何将数据从子组件传递到父组件 https
  • Java 中 Component 的 componentResized 事件,但仅在鼠标释放时执行

    当我的一个组件 画布 调整大小时 我需要进行一些计算 不幸的是 计算可能需要几百毫秒 这会导致调整大小在完成时严重滞后 我想通过仅在调整大小结束时 我猜是释放鼠标按钮时 进行计算来解决这个问题 我怎样才能做到这一点 到目前为止我只有以下内容
  • 如何禁用可创建的反应选择组件?

    我不知道使用什么道具来禁用可创建的 React select 组件 它只是丢失了吗 我尝试了常规的 isDisabled 属性但没有成功
  • Delphi组件spTbxToolbar换肤

    如何在运行时通过代码 不适用于 groupskintype 更改 sptbxtoolbar 组件的皮肤类型 您只能一次更改所有 SpTBXLib 组件的外观 使用此代码 SkinManager SetSkin Office 2007 Blu

随机推荐

  • IdentityServer4官方文档代码配置unauthorized_client Invalid grant type for client错误

    今天按照IdentityServer4官方文档写了一下代码测试下来报错 xff0c 官方文档配置ConfigureService代码如下图 官方配置Configure代码如下图 运行报错效果如下图 完全按照官方文档跑的 xff0c 然后找了
  • 【MATLAB】(一)基本使用入门

    本文目录 前言声明一 MATLAB简介 xff08 基本来自课程内容 xff09 二 入门操作2 1 命令窗口 xff08 Command Window xff09 2 1 1 基本介绍2 1 2 基础指令2 1 3 常用操作 2 2 编辑
  • 【软件相关】Multisim完整教程

    文章目录 前言教程书籍安装基本使用快捷键总结高级操作1 示波器操作2 瞬态仿真3 MCU仿真 问题与解决1 添加场效应管不符合电气规律 xff1f 前言 电路仿真软件中 xff0c Multisim可能不是功能最强大的 xff0c 但一定是
  • 【单片机】C语言总结

    文章目录 文章内容1 位运算1 1 初级应用1 2 进阶应用1 2 1 给寄存器某一位置11 2 2 给寄存器某一位清01 2 3 翻转寄存器某一位1 2 4 数据的字节分解 2 宏定义和预编译2 1 理论指导2 2 看到一个宏定义在数据切
  • 【嵌入式工具】Keil下载,安装,配置教程大全

    文章目录 前言一 Keil下载及安装二 Keil兼容C51和ARM三 STM32支持包下载安装1 官网下载2 安装 四 常用配置1 代码补全和代码联想2 主题设置3 快捷键设置4 快速模板5 快速格式化代码6 转换文件编码格式 2022 3
  • 【嵌入式模块】蓝牙模块使用总结

    目录 前言参考链接常用的蓝牙模块有哪几种 xff1f 如何设置蓝牙模块 xff1f AT指令集BT 04HC 06HC 05 蓝牙主从配对工作手机与电脑端调试方法 前言 作为最为常用的无线通信模块 xff0c 蓝牙可以说是一些小型项目 xf
  • 【嵌入式模块】DS1302 时钟定时芯片

    文章目录 参考链接概述引脚与内部结构引脚定义常用电路内部寄存器及RAM分布 工作时序例程 xff08 51单片机 xff09 参考链接 CSDN 1 CSDN 2 博客园 概述 DS1302时钟芯片是DALLAS 公司推出的涓流充电时钟芯片
  • 【嵌入式模块】直流电机驱动L298N,TB6612详解

    文章目录 参考链接概述L298NTB6612FNG 参考链接 单片机 控制 直流电机 基于L9110S L298N TB6612FNG驱动 简书 概述 从上面那篇教程我们可以看出 xff0c 直流电机控制时 xff0c 只需要给它输入一个P
  • vue .npmrc 文件的作用

    有些项目根目录下有个 npmrc的文件 xff0c 点开看只有一句话 xff1a span class token assign left variable registry span span class token operator 6
  • 【嵌入式模块】ESP8266完整教程

    前言 无线通信中除了最为常用的蓝牙之外 xff0c 剩下的就是WiFi了 xff0c 但是相比于蓝牙模块一般只用来进行透传 xff0c WiFi模块的可自定义程度要更强 xff0c 而这也导致了WiFi模块的入门相对难了一点 参考资料 WI
  • 【MATLAB】(二)基本使用拾遗

    本文目录 0 前期教程1 前言2 输入输出2 1 input2 2 load2 3 importdata2 4 disp2 5 fopen amp fclose2 6 fscanf amp fprintf2 7 textread amp t
  • 【Linux】Ubuntu使用入门

    前言 本文主要记录一些Ubuntu中常用的基本操作 xff0c 记录自己的实践经历 xff0c 不断更新 xff01 xff01 xff01 0 基本文件交互 在Ubuntu系统中 xff0c 右键是没有创建文件的选项的 xff0c 只能创
  • 【嵌入式模块】MPU6050

    文章目录 0 前言1 MPU6050概述1 1 基本概述1 2 引脚和常用原理图 2 代码3 姿态解算3 1 欧拉角 amp 旋转矩阵3 2 DMP 3 校正 0 前言 作为惯性传感器中入门级别的器件 xff0c MPU6050凭借它出色的
  • 【PyQt】PyQt5进阶——串口上位机及实时数据显示

    文章目录 0 前期教程1 前言2 串口部分 QtSerialPort3 绘图部分3 1 QCustomPlot3 2 QtChart3 3 QWT3 4 Qt Designer中如何使用 参考链接 0 前期教程 Python PyQt5入门
  • 【软件相关】Proteus仿真STM32记录

    文章目录 0 前期教程1 前言2 先说说建议的流程3 需要注意的事项3 1 供电网配置不要忘了3 2 ADC模块的使用3 3 元器件查询手册 4 一些小技巧4 1 快速添加标号4 2 出现诡异问题的一种解决思路 0 前期教程 软件相关 Pr
  • 【嵌入式】Modbus实践

    前言 最近接了一个项目 xff0c 需要使用Modbus协议 xff0c 虽然之前有所耳闻 xff0c 但一直没有实操过 xff0c 但实践之后发现其实还是很简单的 xff0c 我认为它本质上就是对串口传输进行 二次封装 建议的入门顺序 大
  • 正则 ^ , \G , \A 区别

    正则 G A 区别 如图
  • c的string库常用函数记录

    1 strcat x xff0c y 将字符串y拼接在字符串x后面 2 strlen xff08 x xff09 返回字符串x的长度 3 strcopy xff08 x xff0c y xff09 将y复制给x xff08 类似于x 61
  • ROS发行版列表完整版

    官方原文 xff1a http wiki ros org Distributions Distro Release date EOL date ROS Melodic Morenia Recommended May 23rd 2018 Ma
  • React styled-components(三)—— 高级特性

    styled components 高级特性 样式继承嵌套设置主题 样式继承 新建 Demo js 文件 xff1a span class token keyword import span React span class token p