React-组件-CSS-In-JS重要特性

简介: React-组件-CSS-In-JS重要特性

styled-components 特性


props

在前面的文章当中介绍了一个 styled-compoents 的一个动态修改状态的特性,这个特性就是借助 props 来实现的,如下, 假如我现在有这么一个需求就是点击一个按钮修改一下 p 标签的颜色:

import React from 'react';
import styled from 'styled-components';
const StyleDiv = styled.div`
    p{
        font-size: 50px;
        color: ${props => props.color};
    }
    a{
       font-size: 25px;
       color: #b0965b;
    }
`;
class Home extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            color: 'red'
        }
    }
    render() {
        return (
            <StyleDiv color={this.state.color}>
                <p>我是home段落</p>
                <a href={'https://www.cnblogs.com/yangbuyiya/'}>我是home超链接</a>
                <button onClick={() => {
                    this.btnClick();
                }}>按钮
                </button>
            </StyleDiv>
        )
    }
    btnClick() {
        this.setState({
            color: 'green'
        });
    }
}
export default Home;

如上的主要流程就是通过按钮点击在方法当中修改了 state 当中的 color 属性值,然后在 StyleDiv 通过组件传参的形式进行传递给 StyleDiv, 通过 styled 创建出来的其实就是一个组件,所以这里可以通过组件传值进行在字符串模板当中进行使用即可。




attrs


在看 attrs 这个属性之前,我们在实现这么一个需求就是通过 styled 创建一个 input type 等于暗文的输入框:

import React from 'react';
import styled from 'styled-components';
const StyleDiv = styled.div`
    p{
        font-size: 50px;
        color: red;
    }
    a{
       font-size: 25px;
       color: #b0965b;
    }
`;
const StyleInput = styled.input``;
class Home extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            color: 'red'
        }
    }
    render() {
        return (
            <StyleDiv>
                <p>我是home段落</p>
                <a href={'https://www.cnblogs.com/yangbuyiya/'}>我是home超链接</a>
                <StyleInput type={'password'}/>
            </StyleDiv>
        )
    }
}
export default Home;


在我们需要创建表单这种元素的时候,如上代码是在使用的时候来指定 type 的其实在 styled 当中就是提供了一种方式在创建之前就可以明确的知道需要创建的组件的类型,那么就是通过 attrs,然后博主这里就紧接着提供了通过 attrs 创建的案例如下:

import React from 'react';
import styled from 'styled-components';
const StyleDiv = styled.div`
    p{
        font-size: 50px;
        color: red;
    }
    a{
       font-size: 25px;
       color: #b0965b;
    }
`;
const StyleInput = styled.input.attrs({
    type: 'password'
})``;
class Home extends React.Component {
    render() {
        return (
            <StyleDiv>
                <p>我是home段落</p>
                <a href={'https://www.cnblogs.com/yangbuyiya/'}>我是home超链接</a>
                <StyleInput/>
            </StyleDiv>
        )
    }
}
export default Home;



设置主题


主题的含义就是设置全局的样式,通过 styled 如何来进行设置,在styled 当中提供了一个 ThemeProvider 可以通过它来进行传递全局主题的样式数据,然后在其它组件的 styled 当中进行使用即可如下:

App.js:

import React from 'react';
import Home from './component/Home'
import About from './component/About'
import {ThemeProvider} from "styled-components";
class App extends React.Component {
    render() {
        return (
            <ThemeProvider theme={{size: '50px', color: 'red'}}>
                <Home/>
                <About/>
            </ThemeProvider>
        );
    }
}
export default App;


Home.js:

import React from 'react';
import styled from 'styled-components';
const StyleDiv = styled.div`
    p{
        font-size: ${props => props.theme.size};
        color: ${props => props.theme.color};
    }
`;
class Home extends React.Component {
    render() {
        return (
            <StyleDiv>
                <p>我是Home段落</p>
            </StyleDiv>
        )
    }
}
export default Home;


About.js:

import React from 'react';
import styled from "styled-components";
const StyleDiv = styled.div`
    p{
        font-size: ${props => props.theme.size};
        color: ${props => props.theme.color};
    }
`;
class About extends React.Component {
    render() {
        return (
            <StyleDiv>
                <p>我是About段落</p>
            </StyleDiv>
        )
    }
}
export default About;




继承


在 styled-components 当中的继承是样式之间的继承,就是说如果两个组件之间有冗余的样式代码,这个时候就可以抽离出一个基础的样式组件,然后都统一继承这个基础的组件就可以了,具体的实现代码如下:

import React from 'react';
import styled from 'styled-components';
const BaseDiv = styled.div`
  font-size: 100px;
  background: green;
`;
const StyleDiv1 = styled(BaseDiv)`
  color: red;
`;
const StyleDiv2 = styled(BaseDiv)`
  color: pink;
`;
class App extends React.Component {
    render() {
        return (
            <div>
                <StyleDiv1>我是Div1</StyleDiv1>
                <StyleDiv2>我是Div2</StyleDiv2>
            </div>
        );
    }
}
export default App;

官方文档地址:https://styled-components.com/docs


最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
19天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
50 10
|
17天前
|
资源调度 前端开发 数据可视化
构建高效的数据可视化仪表板:D3.js与React的融合之道
【10月更文挑战第25天】在数据驱动的时代,将复杂的数据集转换为直观、互动式的可视化表示已成为一项至关重要的技能。本文深入探讨了如何结合D3.js的强大可视化功能和React框架的响应式特性来构建高效、动态的数据可视化仪表板。文章首先介绍了D3.js和React的基础知识,然后通过一个实际的项目案例,详细阐述了如何将两者结合使用,并提供了实用的代码示例。无论你是数据科学家、前端开发者还是可视化爱好者,这篇文章都将为你提供宝贵的洞见和实用技能。
39 5
|
5天前
|
前端开发
css特性
css特性 1.继承性:子级继承父级文字控制属性 ps:子级拥有自己的样式则不会继承父级。 2.层叠性:相同的属性后面覆盖前面,不同的属性叠加 3.优先级:选择器优先级高的样式生效 公式:通配符<标签<类<id<行内样式<!important(选中范围越大,优先级越低) 叠加计算规则:存在复合选择器时,从左向右依次比较个数,同一级个数多的优先级高,如果个数相同,则向后比较;!important权重最高;继承权重最低。
|
28天前
|
JavaScript 前端开发 编译器
掌握现代化JavaScript:ECMAScript提案与特性
【10月更文挑战第13天】本文介绍了ECMAScript(ES)的最新提案与特性,包括可选链、空值合并运算符、类字段和顶层Await等。通过跟踪TC39提案、使用Babel或TypeScript、测试兼容性以及逐步迁移,开发者可以高效地采用这些新特性,简化代码、提高开发效率并增强应用功能。文章还提供了实战技巧,帮助开发者在现代Web开发中充分利用这些现代化的特性。
|
30天前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
25 4
|
30天前
|
前端开发 开发者
React 18 的新特性
【10月更文挑战第12天】 React 18 引入了并发渲染、自动批处理、新的 Suspense 特性、新的 Hooks 和其他多项改进。并发渲染使渲染过程可中断和恢复,提高了应用响应性;自动批处理优化了事件处理,减少不必要的重新渲染;新的 Suspense 支持数据获取和更好的错误处理;新增的 `useId` 和 `useTransition` Hooks 提供了更多功能;服务器组件和改进的错误边界处理进一步提升了性能和稳定性。这些新特性为开发者提供了强大的工具,帮助构建更高效、更稳定的应用。
|
30天前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
149 1
|
30天前
|
前端开发 JavaScript
React Tailwind CSS
10月更文挑战第12天
9 1
|
1月前
|
数据可视化 前端开发 搜索推荐
FLEX组件可视化设计器CSS3代码生成器
FLEX组件可视化设计器CSS3代码生成器
25 4
|
13天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
31 0