原文链接:https://bobbyhadz.com/blog/react-string-interpolation

作者:Borislav Hadzhiev

正文从这开始~

总览

在React中,使用模板字面量进行字符串插值,比如说,<div className={text-white ${myClass}}> 。模板字面量以反引号为界限,允许我们使用美元符号和大括号${expression}语法来嵌入变量和表达式。

import './App.css';

export default function App() {
const myClass = 'bg-salmon'; const name = 'James Doe'; const num = 30;
return (
<div>
<div className={`text-white ${myClass}`}>Some content here</div> <br /> <div className={`text-white ${'hi'.length === 2 ? 'bg-salmon' : ''}`}>
Some content here
</div> <h2>Hello {name}</h2> <h2
style={{
padding: `${num + num}px`,
backgroundColor: 'lime',
}}
>
30 + 30 = {num + num}
</h2>
</div>
);
}

下面是示例中的css声明。

.bg-salmon {
background-color: salmon;
} .text-white {
color: white;
}

模板字面量

我们可以使用模板字面量在字符串中插入变量。需要注意的是,字符串是用反引号````包裹起来的,而不是用单引号。

美元符号和大括号语法允许我们使用占位符来求值。

<div className={`text-white ${myClass}`}>Some content here</div>

<div className={`text-white ${'hi'.length === 2 ? 'bg-salmon' : ''}`}>
Some content here
</div>

我们用大括号把模板字面量包裹起来,标志着一个必须被求值的表达式的开始。

开头和结尾的大括号之间的只是JavaScript代码,所以我们在模板字面量上使用的任何变量或表达式都会被求值。

当你想在JSX代码中渲染变量或表达式时,你必须将代码包裹在大括号内。

<h2>Hello {name}</h2>

JSX之外

您也可以在JSX代码之外使用模板字面量。

const num = 50;

const result = `${num + 50} percent`;

console.log(result); // ️ 100 percent

多行字符串

默认情况下,模板字面量将这些部分连接成一个字符串。你也可以在多行字符串中使用模板字面量来插入变量。

const color1 = 'red';
const color2 = 'blue'; const poem = `roses are ${color1}
violets are ${color2}`; console.log(poem);
// ️ roses are red
// ️ violets are blue

这是非常有用的,因为与连接字符串不同,我们不必在每一行都添加换行符。

调用函数

你甚至可以在模板字面量里面调用函数。

import './App.css';

export default function App() {
const subtract = (a, b) => {
return a - b;
}; const myClass = 'bg-salmon'; const num = 30;
return (
<div>
<div
style={{fontSize: `${subtract(60, 20)}px`}}
className={`padding-${subtract(100, 80)} text-white ${myClass}`}
>
Some content here
</div>
</div>
);
}

三元运算符

这里有一个示例,是在模板字面量里面使用三元运算符。

const color1 = 'blue';
const color2 = 'red'; const result = `${color1.length > color2.length ? color1 : color2}`; console.log(result); // ️ blue

三元运算符与if/else语句基本类似。问号前的部分会被求值,如果它返回一个真值,运算符会返回冒号前的值,否则会返回冒号后的值。

import './App.css';

export default function App() {
return (
<div>
<div className={`text-white ${'hi'.length === 2 ? 'bg-salmon' : ''}`}>
Some content here
</div>
</div>
);
}

示例中的三元运算符检查字符串hilength属性是否等于2,如果等于2,则返回字符串bg-salmon,否则返回空字符串。

逻辑运算

你也可以在模板字面量中使用逻辑或(||)运算以及逻辑与(&&)运算。

const num1 = 0;
const num2 = 100; const result = `${num1 || num2}`;
console.log(result); // ️ 100

如果逻辑或运算的左侧是一个真值,那么便返回该值,否则返回右侧的值。

下面是在模板字面量中使用逻辑与运算的示例。

const bool = true;
const str = 'hello'; const result = `${bool && str}`;
console.log(result); // ️ hello

如果逻辑与运算的左侧是一个假值,那么便返回该值,否则返回右侧的值。

React技巧之字符串插值的更多相关文章

  1. angularjs字符串插值($interpolate)

    <!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...

  2. Swift字符串插值

    字符串插值是一种全新的构建字符串的方式,可以在其中包含常量.变量.字面量和表达式.您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中: let multiplier = let messa ...

  3. Scala字符串插值

    Scala提供了三种字符串插值方式:s,f和raw.1. s字符串插值器简单的说就是解析字符串变量. val name = "Tom" println(s"His nam ...

  4. [转] Scala 2.10.0 新特性之字符串插值

    [From]  https://unmi.cc/scala-2-10-0-feature-string-interpolation/ Scala 2.10.0 新特性之字符串插值 2013-01-20 ...

  5. CoffeeScript里的字符串插值

    拼接字符串是我们常干的事情.与其用很多的 "" + "",不如用一下字符串插值,可读性好些. 方法是在字符串中加入#{ 变量.表达式.函数等} getOther ...

  6. Scala字符串插值 - StringContext

    翻译自:STRING INTERPOLATION 简介 自2.10.0版本开始,Scala提供了一种新的机制来根据数据生成字符串:字符串插值.字符串插值允许使用者将变量引用直接插入处理过的字面字符中. ...

  7. angular,vue,react的基本语法—插值表达式,渲染数据,响应式数据

    基本语法: 1.插值表达式: vue:{{}} react:{} angular:{{}} 2.渲染数据 vue js: export default{ data(){ return{ msg:&qu ...

  8. 【技巧:字符串同构】Avendesora

    判断字符串“同构”的技巧 题目大意 给定A,B两个序列,要求B在A中出现的次数以及位置.定义字符变换:把所有相同的字符变为另一种字符:两个字符串相等:当且仅当一个字符串可以在若干次字符变换之后变为另一 ...

  9. qmake奇淫技巧之字符串宏定义

    阅读本文大概需要3.3分钟 我们平时在软件开发过程中需要定义一些宏,以便在代码中调用,这样每次不需要修改代码,只需要修改外部编译命令就可以得到想要的参数,非常方便 比如我们想在软件介绍中显示软件版本, ...

随机推荐

  1. java基础知识-序列化/反序列化-gson基础知识

    以下内容来之官网翻译,地址 1.Gson依赖 1.1.Gradle/Android dependencies { implementation 'com.google.code.gson:gson:2 ...

  2. 3.初识Java

    一.Java特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 二.Java三大版本 一次编写到处运行 JavaSE:标准版(桌面程序,控制台开发) JavaME: ...

  3. Axios及其async await封装

    Axios(IE8+) 基于promise的http库可用于浏览器与node.js 1.特性 支持promise API 拦截请求和相应 转换请求数据和响应数据 取消请求 自动转换JSON数据 客户端 ...

  4. 基于 Redis 分布式锁

    1.主流分布式锁实现方案 基于数据库实现分布式锁 基于缓存(redis 等) 基于 Zookeeper 2.根据实现方式分类 : 类 CAS 自旋式分布式锁:询问的方式,类似 java 并发编程中的线 ...

  5. async异步函数的执行顺序

    1 async function async1(){ 2 console.log('async1 start') //2 3 await async2() 4 //await async2()后面的内 ...

  6. Photoshop图片处理在线网页使用无需下载绿色

    今天给大家推荐一个ps在线版网页 实测使用效果不错,绿色简介,无需下载,不卡顿一般的电脑配置都可以带起来 因为是在线的所以是精简版的,但是一般ps软件有的工具,功能他都有,比较适合及时性使用 废话不多 ...

  7. Unity制作一个小星球

    制作过程 在场景中新建一个球体(Planet)和一个胶囊(Player),适当缩放并添加材质,这里胶囊会被视为玩家 然后将摄像机设为胶囊(Player)的子物体 自行调整合适的摄像机视角 新建脚本Gr ...

  8. vite创建vue3+ts项目流程

    vite+vue3+typescript搭建项目过程   vite和vue3.0都出来一段时间了,尝试一下搭vite+vue3+ts的项目 相关资料网址 vue3.0官网:https://v3.vue ...

  9. Python学习-Day1(Typora软件与计算机)

    学习总括 Typora软件介绍(markdown语法) 相关拓展知识 文件的后缀名是什么? 什么是语言? 什么是编程语言? 什么是编程?(程序员写代码的本质) 计算机的五大组成部分 计算机的本质 计算 ...

  10. 设置 Visual Studio 总是以管理员身份运行

    话不多说直接上干货 第一步: 打开 Visual Studio 的安装目录,找到 devenv.exe,然后右键快捷菜单选择"兼容性疑难解答". 第二步: 选择故障排查选项 疑难解 ...