react 也就这么回事 02 —— JSX 插值表达式、条件渲染以及列表渲染
我们已经学会了 React 创建元素和渲染元素
ReactDOM.render(<div>Hello React!</div>, document.getElementById("root"));
Hello React会被嵌入到<div>标签中,并且显示在页面上。
那么 React 如何将变量、算术运算、函数调用等表达式的结果显示在页面上呢?
插值表达式
React 提供了在 JSX 中嵌入表达式的方式,我们可以将表达式包裹在大括号中,并将它嵌入 JSX 中
在下面的例子中,我们声明了一个名为 name 的变量,然后在 JSX 中使用它
const name = 'Josh Perez';
const element = <h1>Hello, {name}</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
{name}这种用大括号包裹一个表达式的写法被称为“插值表达式”
在 JSX 语法中,你可以在大括号内放置任何有效的 JavaScript 表达式。例如,2 + 2,user.firstName 或 formatName(user) 都是有效的 JavaScript 表达式。
你甚至可以在大括号中放置 JSX,因为 JSX 本身就是一个表达式。编译之后,JSX 表达式会被转换成普通的 JavaScript函数调用
不同数据类型在插值表达式中的表现
虽然可以在大括号中放置任何有效的 JavaScript 表达式,但是并不是所有数据类型都能显示在页面上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Template</title>
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
<script type="text/babel">
let data1 = "Hello React!";
let data2 = 1;
let data3 = true;
let data4 = undefined;
let data5 = null;
let data6 = [1, 2, 3];
// let data7 = { name: "react" };
let data7 = "object";
let el = (
<div>
<div>{data1}</div>
<div>{data2}</div>
<div>{data3}</div>
<div>{data4}</div>
<div>{data5}</div>
<div>{data6}</div>
<div>{data7}</div>
</div>
);
ReactDOM.render(el, document.getElementById("root"));
</script>
</html>
我们将不同数据类型的数据用大括号包裹,尝试将它们显示在页面上
经过观察可以发现:
undefined、null不会在页面上显示- 数组
[1, 2, 3]显示在页面上会变成:123 - 对象则会报错
那么如何正确显示数组以及对象呢?此处暂且不表
条件渲染
在 React 中,你可以依据应用的不同状态,只渲染对应状态下的部分内容,即条件渲染
条件渲染的其中一个方式就是:在插值表达式中使用与运算符&&或者三目运算符condition ? true : false
let data = "Hello React!";
// let state = true;
let state = false;
let el = (
<div>
<div>{state && "state为true时显示"}</div>
<div>{state ? "state为true时显示" : "state为false时显示"}</div>
</div>
);
ReactDOM.render(el, document.getElementById("root"));
列表渲染
在大括号中直接插入数组,并不能将数组元素逐一显示
let data = [1, 2, 3];
let el = (
<div>
{data}
</div>
);
ReactDOM.render(el, document.getElementById("root"));
// 页面显示:123
如果我们想让数组的每个元素逐一通过<li>显示,可以借助函数逐一创建<li>,然后将函数插入插值表达式中
示例如下:
let data = [1, 2, 3];
const toList = (list) => {
let ret = [];
list.forEach((element) => {
ret.push(<li>{element}</li>);
});
return ret;
};
let el = <ul>{toList(data)}</ul>;
ReactDOM.render(el, document.getElementById("root"));
在这个示例中,我们用forEach遍历数组,使用 JSX 创建 React 元素,将每个数组元素都用<li>标签包裹,得到了新的数组[<li>1</li>, <li>2</li>, <li>3</li>]
又在<ul>{toList(data)}</ul>中通过插值表达式来将新数组嵌入到<ul>元素中
我们已经知道了{}中的数组显示规则:去掉[]和,
于是最终得到:
let el = (
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
);
回过头来看函数toList:用已有数组生成新数组
我们可以用map方法和箭头函数来进一步简化这个方法:
const toList = (list) => list.map((element) => <li>{element}</li>);
公众号【前端嘛】
react 也就这么回事 02 —— JSX 插值表达式、条件渲染以及列表渲染的更多相关文章
- react 入坑笔记(五) - 条件渲染和列表渲染
条件渲染和列表渲染 一.条件渲染 条件渲染较简单,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI. 贴一个小栗子: funct ...
- angular,vue,react的基本语法—双向数据绑定、条件渲染、列表渲染、angular小案例
基本语法: 1.双向数据绑定 vue 指令:v-model="msg" react constructor(){ this.state{ msg:"双向数据绑定" ...
- vue简介,插值表达式,过滤器
目录 VUE框架介绍 what?什么是vue? why?为什么要学习vue? special特点? how如何使用? 下载安装? 导入方式? 挂在点el 插值表达式 delimiters自定义插值表达 ...
- [Vue入门及介绍,基础使用、MVVM架构、插值表达式、文本指令、事件指令]
[Vue入门及介绍,基础使用.MVVM架构.插值表达式.文本指令.事件指令] 1)定义:javascript渐进式框架 渐进式:可以控制一个页面的一个标签,也可以控制一系列标签,也可以控制整个页面 ...
- React文档翻译系列(三)JSX简介
# React文档翻译系列(三)JSX简介 先来看一下下面的变量声明: ``` const element = Hello world! ``` 这种有趣的标签语法既不是字符串也不是HTML. 这种形 ...
- react实战项目开发(2) react几个重要概念以及JSX语法
前言 前面我们已经学习了利用官方脚手架搭建一套可以应用在生产环境下的React开发环境.那么今天这篇文章主要先了解几个react重要的概念,以及讲解本文的重要知识JSX语法 React重要概念 [思想 ...
- angular,vue,react的基本语法—插值表达式,渲染数据,响应式数据
基本语法: 1.插值表达式: vue:{{}} react:{} angular:{{}} 2.渲染数据 vue js: export default{ data(){ return{ msg:&qu ...
- React 学习(五) ---- 条件和列表渲染
条件渲染 React中的条件渲染和我们平常写的js 代码一样,都是用的if else, 只不过在if else 中它的返回值是jsx, 根据不同的条件渲染不同的UI. 先写两个组件 //登录的用户显示 ...
- React:快速上手(3)——列表渲染
React:快速上手(3)——列表渲染 使用map循环数组 了解一些ES6 ES6, 全称 ECMAScript 6.0 ,是 JaveScript 的下一个版本标准,2015.06 发版.ES6 主 ...
随机推荐
- nginx+php环境搭建详解(Linux)
今天在内网环境下,给linux主机安装nginx+php环境,由于是内网环境,只能手动解压缩包进行安装,在这过程中我也着实遇到了一些问题(困扰了我许久),还好最后搭建环境成功了,所以写篇博客记录一下, ...
- markdown mermaid流程图
流程图 所有流程图都由节点.几何图像.箭头或线条组成. mermaid代码定义了这些节点和边的制作和交互方式.可以有不同的箭头类型.多向箭头以及与子图的连接. 节点 节点 flowchart LR i ...
- ArcGIS把导入的shp按渔网区块分割成更小的文件
前言 前端地图的开发需要导入城市的3D建筑白模,如果直接导入整个城市的json,文件大小高达76M,浏览器会直接崩溃,所以需要用ArcGIS分割成更小的文件后再给前端导入展示. ArcGIS版本:10 ...
- 【转载】ASP.NET前台代码绑定
ASP.NET前台代码绑定后台变量方法总结http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html ASP.NET前台无法访问后台int ...
- .Net Core依赖注入
一.配置文件的读取 利用Startup类中的configuration读取appsettings.json中的配置 { "Logging": { "LogLevel&qu ...
- gin框架中HTTP请求和参数的解析
1. 方法一: 通用的处理方法---Handle package main import ( "fmt" "github.com/gin-gonic/gin" ...
- BUGKU-Misc 成果狗成果狗
下载下来可以得到一张图片 成果真好看 放到kali里面用binwalk查看有没有隐藏文件,发现这里面有两张图片 然后可以拖到winhex或者010里面把两张图片分离出来,可以分离出1.jpg和54.j ...
- java中的数据模型类
package com.aaa.zxf.ajax.test; import java.io.Serializable; /** * java中的继承. * * 一.数据模型类 * 数据模型类:用来存取 ...
- 添加项目文件时候不要把引用文件直接放到bin-debug里
如果时anycpu没问题,但是新建其他平台时,会重新生成失败,原因时无法找到dll,现象为x64目录下的debug文件夹为空
- vue组件中使用watch响应数据
在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: 普通用法: <template> //视图 <input v-mode ...