React:styled-components
``是es6的Template Literals(模版字符串),许多人对这个一知半解,今天在这边总结下:
`${expression}`(表达式插补)
var x;
var y;
sth.innerHTML = `相对当前盒子坐标:x轴:${x},y轴:${y}`
这样表示少了很多代码量并且提高了阅读性,不然你需要用+““+来拼接字符串,将拼接字符串更简单的表示出来,再举栗子
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
// "Fifteen is 15 and
// not 20."
模版表示法(${}里面是js表达式,所以包括变量等)
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."
多行字符串
console.log("string text line 1\n\
string text line 2");
// "string text line 1
// string text line 2"
模版字符串表示法
console.log(`string text line 1
string text line 2`);
// "string text line 1
// string text line 2"
只是简单加了个回车
主要讲讲styled-components里面的语法,用过这个框架的人都知道,定义一个包含样式的h1:styled.h1`font-size:1.5em;.....`,这里面就涉及到了模版字符串,一开始不知道为什么这样写,以为又是什么高科技,测试完才发现其实:
styled.h1`
font-size:1.5em;
`
就等于如下
styled.h1("font-size:1.5em;")
为什么这样说呢?
我们来看一个测试:
现在控制台定义一个函数:
//在浏览器控制台输入
//这个函数的意思就是输出这个函数的所有参数,js中的rest用法
const f = (...args) => {console.log(...args)}
在控制台输入:f(123) 或者 f('123')都是正确的输出
在控制台输入:f`123${'abc'}`
输出结果:(2) ["123", "", raw: Array(2)] "abc" >>>一个包含"123",""的长度为2的数组,并在后面输出abc
在控制台输入:f`123${'abc'}${'def'}`
输出结果:(3) ["123", "", "", raw: Array(3)] "abc" "qwe" >>>一个包含"123","",""的长度为2的数组,并在后面输出abc,cdf结合两次输出结果,可以发现它总是把${}里面的东西转换成""和正常的字符串放在一个数组里面,并在后面单独输出每个${}的值
在控制台输入:f`1+2=${1+2}${[1,2,3,4]}`
输出结果:(3) ["1+2=", "", "", raw: Array(3)] 3 (4) [1, 2, 3, 4] 现在足以证明只要被${}括起来都会转换成""放在一个数组里面,并且在后面输入${}里面的值
我们再来看一个测试:
//在浏览器控制台输入
//使用rest参数,当你传入的参数是一个函数的话就执行这个函数,其他类型一概不执行
const testTemplate = (...args) => args.forEach(arg => {
if (typeof arg === 'function'){
arg();
}
})
上面定义了一个函数,接下来我们来传参数并且看结果了来测试模版字符串的精髓所在。
在控制台输入:testTemplate(1,2)
输出结果:undefined >>>意料之中,因为当你传入的参数是一个函数的话就执行这个函数,其他类型一概不执行。
在控制台输入:testTemplate(1,() => {consolo.log('执行了')})
输出结果: 执行了 >>>这里打印出‘执行了’,说明后面的函数被执行到
在控制台输入:testTemplate`1,() => {console.log('执行了')}`
输出结果: 执行了 >>>跟上面加了括号的结果一样。
所以styled.h1,styled.div等等其实都是一个函数,它们接受模版字符串这样的参数,而为了实现根据传入的props值显示不同样式,可以这样定义:
const MyDiv = styled.div`
color:${props => props.color};
font-size:${props => props.bigger ? '2em' : '1em'}
`
使用时,可以这样写:
//bigger={true} 也可以省略{true},直接写 bigger
<MyDiv color="green" bigger={true}>something in div...</MyDiv>
总结:
styled-components其实就是函数传递。
React:styled-components的更多相关文章
- styled components草根中文版文档
1.styled components官网网址 https://www.styled-components.com/docs 以组件的形式来写样式. 1.1安装 yarn add styled-c ...
- React & styled component
React & styled component https://www.styled-components.com/#your-first-styled-component tagged t ...
- [React] Use React.ReactNode for the children prop in React TypeScript components and Render Props
Because @types/react has to expose all its internal types, there can be a lot of confusion over how ...
- (翻译)React Container Components
原文:Container Components Container Components 在 React 模式上对我的代码有最深远影响的一个模式叫 container component 模式. 在 ...
- React组件Components的两种表示方式
函数式的表示: function Welcome(props) { return <h1>Hello, {props.name}</h1>; } Class式的表示: clas ...
- 6周学习计划,攻克JavaScript难关(React/Redux/ES6 etc.)
作者:余博伦链接:https://zhuanlan.zhihu.com/p/23412169来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 和大家一样,最近我也看了Jo ...
- 推荐 9 个样式化组件的 React UI 库
简评:喜欢 CSS in JS 吗?本文将介绍一些使用样式组件所构建的 React UI 库,相信你会很感兴趣的. 在 React 社区,对 UI 组件进行样式化的讨论逐步从 CSS 模块到内联 CS ...
- The Road to learn React书籍学习笔记(第一章)
react灵活的生态圈 Small Application Boilerplate: create-react-app Utility: JavaScript ES6 and beyond Styli ...
- Angular Vue React 框架中的 CSS
框架中的 CSS Angular Vue React 三大框架 Angular Vue 内置样式集成 React 一些业界实践 Angular Angular . js (1.x):没有样式集成能力 ...
- (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去
原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...
随机推荐
- nginx,php-fpm性能优化
When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to yo ...
- 杂项-.Net-HQL:HQL
ylbtech-杂项-.Net-HQL:HQL HQL是Hibernate Query Language的缩写,提供更加丰富灵活.更为强大的查询能力:HQL更接近SQL语句查询语法. 1.返回顶部 1 ...
- Java学习之集合(Collection接口)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储 集合特点: 1.用于存储对象的容器 2.集合长度可变 3.不可以存储基本数据类型 集合体系的顶层C ...
- JAVA学习之跨平台性
Java语音的特点:跨平台性什么是跨平台性通过Java语音编写的应用程序再不同的系统平台上都可以运行. 原理是什么只要在需要运行Java应用程序的操作系统上.先安装一个Java虚拟机(JVM Java ...
- UDP 协议解析 - 1
目录 1. 概述 2. UDP 的主要特点 3. UDP 的首部格式 3. UDP 校验和 3.1 伪首部 3.2 UDP 校验和计算方法 [参考文献] 1. 概述 用户数据报协议(UDP,User ...
- Flink 编程模型
抽象层次 levels_of_abstraction 最低级的抽象接口是状态化的数据流接口(stateful streaming).这个接口是通过 ProcessFunction 集成到 Data ...
- 什么是NVMe硬盘?
本文摘自:https://zhidao.baidu.com/question/590890784.html NVMe硬盘指的是非易失性内存主机控制器接口规范(Non-Volatile Memory e ...
- Netty 源码学习——服务端流程分析
在上一篇我们已经介绍了客户端的流程分析,我们已经对启动已经大体上有了一定的认识,现在我们继续看对服务端的流程来看一看到底有什么区别. 服务端代码 public class NioServer { pr ...
- Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询
目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...
- socket API CSocket CAsyncSocket 用法及区别
要进行网络编程就要和Socket打交道,Socket有同步阻塞方式和异步非阻塞方式两种使用,事实上同步和异步在我们编程的生涯中可能遇到了很多,而Socket也没什么特别.虽然同步好用,不费劲,但不能满 ...