老莫的笔记本  
  
查看: 282|回复: 0

React17 styled-components

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2022-6-14 17:24:17 | 显示全部楼层 |阅读模式


  1. import React from "react";
  2. import Styled from "styled-components";

  3. const mtyi = '星火相传';
  4. const mtyi2 = '地大物博';



  5. // 利用 styled-components 进行CSS in js 的操作
  6. // 1.安装 npm install --save styled-components
  7. // 2. 引入
  8. // 3.利用 styled创建组件并且引入 建议安装插件,要不然编辑器显示的是字符串格式


  9. // props 的用法
  10. const SDiv = Styled.div `
  11.     p{
  12.         font-size:40px;
  13.         color:red;
  14.     }
  15.     a{
  16.         font-size:30px;
  17.         color: ${props=>props.color};  
  18.     }
  19. `;

  20. // attrs 元素原有属性的用法,这里有个返回值问题attrs执行后的返回值仍然是函数,所以后面可以继续调用 模板函数
  21. const SInp = Styled.input.attrs({
  22.     type:'password',
  23.     placeholder: '夸作者真帅'
  24. }) `
  25.     background:#eee;
  26.     height:32px;
  27.     line-height:32px;
  28. `;



  29. // 继承的写法 [就是几个div 样式重复 省的麻烦 搞个继承]

  30. const BossDiv = Styled.div`
  31. font-size:20px;
  32. background-color:red;
  33. `;
  34. const Diva = Styled(BossDiv)`color:green;`;
  35. const Divb = Styled(BossDiv)`color:#eee;`;


  36. // 知识点之:样式数据的互通,主要用于主题样式切换
  37. // 1. 引入 import {ThemeProvider} from 'styled-components';
  38. // 2. 搞个标签,把不同的模块放进去 并在标签中用theme 传递所需样式 <ThemeProvider  theme={{color:red}} > <A1></A1> <B1></B1> </ThemeProvider>
  39. // 3. 在子组件中接收 ${props=>props.theme.color}



  40. class TemJs extends React.Component{
  41.     constructor(){
  42.         super();
  43.         this.state={
  44.             num:123 ,
  45.             aColor:'#a20ddf'
  46.         }
  47.         this.tmp();
  48.     }

  49.     render(){
  50.         return (
  51.             <section>
  52.                 <p> 补充一个ES6的语法 </p>
  53.                 {/* 这个概念等于向子组件传值 可以在css-in-js 的模板语法中 用 ${props=>props.color}; */}
  54.                 <SDiv color ={this.state.aColor} >
  55.                     我真帅
  56.                     <p>大力</p>
  57.                 </SDiv>
  58.                 <SInp></SInp>
  59.                 <Diva>aDiv</Diva>
  60.                 <Divb>bDiv</Divb>
  61.             </section>
  62.         );
  63.     }

  64.     tmp(){
  65.         console.log(`常规ES6字符串拼接语法${mtyi}我爱我家`)

  66.         // 下方这个方法表明 es6 拼接完的模板字符串是可执行函数, 打印  出来的是 一个数组: 结果是 字符串的 非替代字段拆分 ,组成的数组
  67.         //  在ES6中 可以使用模板字符串 调用函数

  68.         this.a `常规ES6字符串拼接语法${mtyi}我爱我家${mtyi2}的,人生在世弄扁舟`;

  69.         this.b('你','我','他');

  70.         this.b `常规ES6字符串拼接语法${mtyi}我爱我家${mtyi2}的,人生在世弄扁舟`;
  71.     }

  72.     tmp2(){
  73.         // 解析

  74.     }
  75.    
  76.     a(arr){
  77.         console.log(arr)
  78.     }

  79.     b(...brr){
  80.         console.log(brr) // 解析结果为 多个元素的数组,第一个元素 非替代字段拆分成的数组, 第二个元素开始 后面都是替代字段 各 为一个元素
  81.     }

  82. }



  83. export default TemJs;



复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表