React之中的styled-components

2023-11-12

在react之中使用css不像vue之中那么方便,react官方也没有很统一的用法,下面是有关于styled-component的使用。
1、安装库

yarn add styled-components

2、基本使用
在其中styled.div``代表的是div的css样式,在其中.banner表示div下的类名为banner的节点。span之下的&.active,代表的是span标签并且类为active的。

import styled from 'styled-components';

export const HomeWrapper = styled.div`
  font-size: 12px;
  color: red;

  .banner {
    background-color: blue;

    span {
      color: #fff;

      &.active {
        color: red;
      }

      &:hover {
        color: green;
      }

      &::after {
        content: "aaa"
      }
    }

    /* .active {
      color: #f00;
    } */
  }
`

这样设置以后,只需要将div标签改为改为HomeWrapper组件即可。

import React, { PureComponent } from 'react';

import { 
  HomeWrapper,
} from "./style";

export default class Home extends PureComponent {
  render() {
    return (
    //原本是<div>
      <HomeWrapper>
        <div className="banner">
          <span>轮播图1</span>
          <span className="active">轮播图2</span>
          <span>轮播图3</span>
          <span>轮播图4</span>
        </div>
      </HomeWrapper>
    )
  }
}

2、props穿透
例如在使用styled-components时将input设置样式
可以从props之中获取有关的属性来进行样式的设定

const HYInput = styled.input`
  background-color: lightblue;
  color: ${props => props.color};
`
export default class Profile extends PureComponent {
  constructor(props) {
    super(props);

    this.state = {
      color: "purple"
    }
  }

  render() {
    return (
      <div>
        <input type="password"/>
        //此处依旧还是可以设置input的type属性
        <HYInput type="password" color={this.state.color}/>
        <h2>我是Profile的标题</h2>
        <ul>
          <li>设置列表1</li>
          <li>设置列表2</li>
          <li>设置列表3</li>
        </ul>
      </div>
    )
  }
}

3、attrs的使用
可以在上述代码之中对const HYInput = styled.input后面紧跟attrs函数,传入一些固定的样式设置,在``之中设置样式的时候依旧是通过props进行获取。

const HYInput = styled.input.attrs({
  placeholder: "coderwhy",
  bColor: "red"
})`
  background-color: lightblue;
  border-color: ${props => props.bColor};
  color: ${props => props.color};
`

4、样式的继承
如果有相同的部分可以进行样式的继承。
例如下面两个设置的样式有大部分相同

const HYButton = styled.button`
  padding: 10px 20px;
  border-color: red;
  color: red;
`

const HYPrimaryButton = styled.button`
  padding: 10px 20px;
  border-color: red;
  color: #fff;
  background-color: green;
`

继承的操作如下:

const HYPrimaryButton = styled(HYButton)`
  color: #fff;
  background-color: green;
`

5、主题的设置
可以设置大部分运用到的色调样式进行主题的设置。
需要导入:

import styled, { ThemeProvider } from 'styled-components';

在组件外层的嵌套如下,其中属性theme传一个对象,css主题样式。

export default class App extends PureComponent {
  render() {
    return (
      <ThemeProvider theme={{themeColor: "red", fontSize: "30px"}}>
        <Home />
        <hr />
        <Profile />
        <HYButton>我是普通的按钮</HYButton>
        <HYPrimaryButton>我是主要的按钮</HYPrimaryButton>
      </ThemeProvider>
    )
  }
}

在子孙组件之中如下获取css样式:

export const TitleWrapper = styled.h2`
  text-decoration: underline;
  color: ${props => props.theme.themeColor};
  font-size: ${props => props.theme.fontSize};
`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React之中的styled-components 的相关文章

随机推荐

  • java 自带的小命令 javac

    今天要用 windows 下的dos 命令行来执行一个小demo 发现了如下小坑 使用命令 在当前 java 文件中 执行 javac Hello java 执行成功并且在当前文件夹下 坑 找不到或无法加载主类 第一个中情况猜想CLASSP
  • tarball安装GnuPG (gpg) 2.2.10

    https www gnupg org download mac 方式一 推荐 mac brew install gpg pinentry pinentry mac echo pinentry program usr local bin p
  • vue 读取本地excel文件

    一 安装依赖 npm install xlsx save 或 npm instatll xlsx 0 17 0 save 建议安装低版本 npm install file saver save 二 引入 import axios from
  • 【前端】JS异步加载

    文章目录 为什么要异步加载 如何实现异步加载 参考 为什么要异步加载 两个原因其实是一个意思 原因1 JS是单线程的语言 它会同步的执行代码 从上往下执行 但是 一旦网络不好 或要加载的js文件过大的话 会造成页面阻塞 不利于后续的渲染工作
  • Android中高级面试必知必会,成功定级腾讯T3-2

    前言 今天我给大家再次分享一下 我最近的一些读书的感想 思考起来 确实能够给自己带来一些真实的帮助和启发 希望大家在平时的工作学习中 也能够认清楚学习的一些本质 如果我们的学习是在不断掌握应对具体工作场景和问题的方法 那就是在努力提升技术效
  • 记一次R的可视化使用-生成城市各个景点的多边形图

    项目中需要用到全国各个城市的景点坐标范围 需要人工审核各个景点的数据正确性和各个景点之间的距离分布 首先想到的就是使用R绘制每个景点的多边形区域 首先通过python 根据数据生成R绘图代码 当然这里的R绘图代码非常简单 利用原始数据拼接成
  • 大数据用户画像之Oozie、Hue集成Spark2 应用调度

    一 Oozie 大数据调度工具 1 1 官方介绍 1 Oozie是一个管理 Apache Hadoop 作业的工作流调度系统 2 Oozie的 workflow jobs 是由 actions 组成的 有向无环图 DAG 3 Oozie的
  • java写一个多人线上聊天室

    java写一个多人线上聊天室 多线程 备注 课程实验作业 留作自用 效果如下 以下四个程序在一个包里 JavaMain java public class JavaMain public static void main String ar
  • JMeter压力测试与JVM监控以及调优

    一 性能指标 响应时间 Response Time RT 响应时间指用户从客户端发起一个请求开始 到客户端接收到从服务器端返回的响 应结束 整个过程所耗费的时间 HPS Hits Per Second 每秒点击次数 单位是次 秒 TPS T
  • 程序员转岗面试经

    整理下最近面试被问到的问题吧 以供各位参考 ps 本人计划转岗 转行 想从程序员转到对外岗位 所以最近面的主要是两个方向 售前 项目管理 基本面试问题 1 自我介绍 这个问题是通用性的 基本回答点是 问好 我是谁 我做过哪些 我有哪些能力
  • Assets/FollowDestination.cs(6,13): error CS0246: The type or namespace name `NavMeshAgent' could not...

    问题的出现与描述 在Unity中创建一个NPC 使它一直跟踪一个目标Destination C 脚本代码如下 错误信息描述如下 using System Collections using System Collections Generi
  • 各省简称 拼音 缩写_全国所有城市拼音及缩写

    LUOHE LH 洛阳 LUOYANG LY 潞西 LUXI LX 泸州 LUZHOU LZ 吕梁 LVLIANG LL 旅顺 LVSHUN LS 马鞍山 MAANSHAN MAS 茂名 MAOMING MM 梅河口 MEIHEKOU MH
  • vue el-button获取按钮的值_那些Vue开发遇到的坑---响应式系统

    Vue是目前使用较为广泛的前端框架之一 相比React Vue更容易学习上手 毕竟在React中万物皆JavaScript 这让一些习惯于编写HTML JavaScript的程序员不太乐于接受 相比之下 Vue的模板语法它不香么 当然 Vu
  • html5进阶

  • synchronized和ReentrantLock区别简介说明

    在多线程开发中 需要锁定指定代码块 使其在同一时间只能由一个线程运行 我们日常开发中常用的同步锁有 synchronized和ReentrantLock 那么他们两者之间到底有什么不同之处呢 下文笔者讲述synchronized和Reent
  • es 更新延迟

    es在更新之后并不是立即可见 可查询 的 会有1s的延迟 可以通过设置refresh interval参数来修改刷新的间隔 但是在实际应用中 1s的延迟已经算是很久了 在java high level client中 为index inse
  • MiniUI 的知识积累

    1 默认选中树的根节点 var tree mini get tree 1 tree selectNode tree getRootNode children 0 2 表格修改列头名称 div class mini fit div class
  • novel Ai (stable-diffusion-webui)安装

    关于novel ai的本地化安装 环境 英伟达显卡 win11 可以连接github并下载内容 安装 python 3 10 6及以上 安装并添加到path 安装cuDNN和CUDAToolKit 先更新主机的显卡驱动 检查系统的显卡驱动版
  • Java如何进行内存分配

    Java 虚拟机 JVM 负责管理 Java 应用程序的内存 在 Java 中 内存被划分为不同的区域 每个区域都有不同的用途 Java 中有两种主要的内存区域 堆和栈 功能 1 堆 堆是存储所有对象实例的内存区域 所有对象实例都存储在堆中
  • React之中的styled-components

    在react之中使用css不像vue之中那么方便 react官方也没有很统一的用法 下面是有关于styled component的使用 1 安装库 yarn add styled components 2 基本使用 在其中styled di