首页 > 其他分享 >推荐一个在react项目中为元素添加样式的第三方库(styled-components)(css in js方案)

推荐一个在react项目中为元素添加样式的第三方库(styled-components)(css in js方案)

时间:2024-11-01 09:50:15浏览次数:3  
标签:color js react export components styled import UlContainer

1、安装插件

pnpm

      pnpm i styled-components 

npm

      npm install styled-components

yarn 

       yarn add styled-components

2、创建一个js文件用于写样式(模板字符串写法)

(1)以App.jsx组件为例,创建一个style.js样式文件,创建组件并暴露
// 从styled-components库中导入styled函数  
import {styled} from "styled-components";  
  
// 使用styled函数创建一个针对ul元素的样式组件,并将其导出为UlContainer  
// 这意味着你可以在其他JavaScript/JSX文件中通过import引入UlContainer并使用它  
// 来应用特定的样式到ul元素上,而无需直接使用CSS类或内联样式  
export const UlContainer = styled.ul`  
  // 这里的CSS样式将被应用到所有使用UlContainer组件的ul元素上  
  // 这里设置的样式是文本颜色为橙色  
  color: orange;  
`
 (2)在App组件中引入并使用
import {UlContainer} from "./style.js";
export default () => {
    return(
        <UlContainer>
            {list.map((item, i) => (
              <li key={i}>{item.name}</li>
            ))}
         </UlContainer>
    )
    
}
(3)支持嵌套语法
import {styled} from "styled-components";
export const UlContainer = styled.ul`
  color: orange;
  li{
    border: 1px solid deepskyblue;
    &:hover{
      background: aquamarine;
    }
  }
`

3、props传参

(1)普通传参

App.jsx(传入参数)

import {UlContainer} from "./style.js";
export default () => {
    return(
        <UlContainer bcolor='#ddd' color='deepskyblue'>
            {list.map((item, i) => (
              <li key={i}>{item.name}</li>
            ))}
         </UlContainer>
    )
    
}

style.js(通过props接收参数)

import {styled} from "styled-components";
export const UlContainer = styled.ul`
  color: ${props => props.color};
  li{
    border: 1px solid ${({bcolor}) => bcolor};
  }
`
(2)参数默认值

假如在组件内没有传入参数

import {UlContainer} from "./style.js";
export default () => {
    return(
        <UlContainer>
            {list.map((item, i) => (
              <li key={i}>{item.name}</li>
            ))}
         </UlContainer>
    )
    
}

style.js依旧接了参数,就可以给它一个参数默认值

import {styled} from "styled-components";
export const UlContainer = styled.ul`
  color: ${props => props.color || 'deepskyblue'}; // 如果用户没传入值,就使用后面的默认值
  li{
    border: 1px solid ${({bcolor}) => bcolor || 'deeppink'};
  }
`

以上模板字符串写法很多小伙伴用不习惯,样式组件目前还支持以下写法

4、样式组件的其他写法(对象写法)

(1)基本使用
import {styled} from "styled-components";
export const UlContainer = styled.ul({
  color:'red'
})
(2)嵌套语法
import {styled} from "styled-components";
export const UlContainer = styled.ul({
  color:'red',
  li:{
    border: '1px solid blue',
    '&:hover':{
      background: 'aquamarine'
    }
  }
})
(3)props传参及参数默认值(传入一个函数并返回一个对象)
import {styled} from "styled-components";
export const UlContainer = styled.ul(({color = 'purple',border = 'blue'}) =>(
  {
    color:border,
    li:{
      border: `1px solid ${color}`,
      '&:hover':{
        background: 'aquamarine'
      }
    }
  }
))

通过以上对styled-components写法的基本介绍,希望小伙伴们能喜欢上这种写法,采用css in js这种方案能解决在react项目中写样式遇到的大多数问题,比如样式冲突等。如果小伙伴们有什么问题请在评论区讨论。。。

标签:color,js,react,export,components,styled,import,UlContainer
From: https://blog.csdn.net/weixin_47980952/article/details/143406022

相关文章

  • 响应式项目(RxJS+Vue.js+Spring)大决战(6):用户登录(后端服务模块)
    书接上篇:响应式项目(RxJS+Vue.js+Spring)大决战(5):主页的实现(前端视图模块)        6用户登录6.1功能需求及界面设计        用户登录模块用于学生和教师的日常登录处理,功能需求主要包括:(1)构建用户登录主界面;(2)实现登录业务处理;(3)登录成功后,生成JWT令牌以备其他功......
  • C#读取Json配置文件
    1、安装NuGet包:Newtonsoft.Json2、新建Confgi.json{"K-Fins":-1,"K-Zs":0.2,}3、在Models文件中新建AppConfig.cs和ConfigManager.cspublicclassAppConfig{publicdoubleKFins{get;set;}publicdoublekZs{get;s......
  • java ssm 高校研招信息及专业信息系统 研究生招生信息 源码 jsp
    一、项目简介本项目是一套基于SSM的高校研招信息及专业信息系统,主要针对计算机相关专业的和需要项目实战练习的Java学习者。包含:项目源码、数据库脚本、软件工具等。项目都经过严格调试,确保可以运行!二、技术实现​后端技术:Spring、SpringMVC、MyBatis前端技术:JSP、HTM......
  • C# serialize big collection via NewtonSoft.Json
    System.OutOfMemoryExceptionHResult=0x8007000EMessage=Exceptionoftype'System.OutOfMemoryException'wasthrown.Source=mscorlibStackTrace:atSystem.Text.StringBuilder.ToString()atSystem.IO.StringWriter.ToString()atNewto......
  • nextjs 实战开发1 Mercury 二级域名分发系统| 曲速引擎 Warp Drive
    开发目标开发一个免费的二级域名分发系统创建项目root@ubuntu:~/dev-nextjs/mercury_frontend#pnpmcreatenext-app@latest.版本:pnpm-v9.12.2版本:node-vv20.16.0版本:next15.0.2为了开发方便,我们要将脚手架的package.json进行修改,nextdev-H0.0.0.0-p80,这样当我们运......
  • jquery/js通过当前URL对当前栏目链接高亮显示
    ​对于静态页面通过当前URL对当前栏目链接高亮显示这个技巧很多小伙伴问过墨鱼,今天放一下通用代码给小伙伴参考:HTML代码:<div class="nav"><a href="index.html">首页<a href="list_1.html">栏目一<a href="list_2.html">栏目二<a href="list_3.html&qu......
  • Delphi中TJSONObject使用问题
    jsonProcess:=TJSONArray.Create;forvari:=0toprocessForms.ListView_Processes.Items.Count-1dobegintempListItem:=processForms.ListView_Processes.Items[i];varjsonObject:=TJSONObject.Create;tryjsonObject.AddPair('pid......
  • 华为OD机试-(E卷,100分) - 补种未成活胡杨(Java & Python& JS & C++ & C )
    最新华为OD机试题目描述近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?输入描述N总种植数量,1<=N<=100000M未成活胡杨数量,M个空格......
  • 响应式项目(RxJS+Vue.js+Spring)大决战(5):主页的实现(前端视图模块)
    书接上篇:响应式项目(RxJS+Vue.js+Spring)大决战(4):主页的实现(后端服务模块)5.2前端视图模块5.2.1整体结构的设计        前端模块app-view/home负责主页视图的建构,其结构如下图所示:        本篇所述方法,体现了极强的独特性、技巧性! 5.2.2主页home.html ......
  • js 实现鼠标拖尾特效
    废话不说,直接上代码。mousemove.jsletisDivCreated=false;letnum=0document.head.insertAdjacentHTML('beforeend',`<style>.icon-div{position:absolute;pointer-events:none;transition:all......