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


最后

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

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

相关文章
|
2月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
94 0
|
22天前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
239 91
|
4天前
|
JavaScript 前端开发 Oracle
软件工程师,学习下JavaScript ES6新特性吧
软件工程师,学习下JavaScript ES6新特性吧
24 9
|
4天前
|
前端开发
React 使用 CSS 样式
在 React 应用程序中使用 CSS 有多种方法。 以下是一些常见的方式以及如何在 React 中实现这些方法的详细说明。
13 4
|
7天前
|
前端开发 JavaScript API
React、Vue.js 和 Angular前端三大框架对比与选择
前端框架是用于构建用户界面的工具和库,它提供组件化结构、数据绑定、路由管理和状态管理等功能,帮助开发者高效地创建和维护 web 应用的前端部分。常见的前端框架如 React、Vue.js 和 Angular,能够提高开发效率并促进团队协作。
24 4
|
9天前
|
前端开发 JavaScript 开发者
React 和 Vue.js 框架的区别是什么?
React 和 Vue.js 框架的区别是什么?
|
21天前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
36 3
|
6天前
|
Web App开发 JavaScript 前端开发
用 JavaScript 创建 XPCOM 组件
用 JavaScript 创建 XPCOM 组件
|
9天前
|
JavaScript 前端开发
react Or vue中引入animate.css
本文介绍了如何在React或Vue项目中引入animate.css库来使用动画效果,包括通过npm安装或在线链接引入,并展示了如何在React组件和Vue路由过渡中使用动画类。
24 0
|
2月前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
76 0
下一篇
无影云桌面