React 语法

1、认识JSX

JSX是一种JavaScript的语法扩展,可以用于描述UI界面,可以与JavaScript融合在一起使用

JSX的语法:const element = <h2>Hello World</h2>

在 <script type="text/babel">  时才可以这样写

2、为什么React选择JSX

React认为渲染逻辑本质上与其他UI逻辑存在内在耦合

(1)比如UI需要绑定事件(button、a原生等等)

(2)比如UI中需要展示数据状态,在某些状态发生改变时,又需要改变UI 

JSX的书写规范 

1、JSX的顶层只能由一个根元素

2、通常在JSX的外层包裹一个小括号(),方便阅读,并且JSX可以换行书写

3、JSX中的标签可以是单标签,也可以是双标签(如果是单标签必须是/结尾<App/>)

3、JSX的使用

(1) JSX中的注释

 <div>{/*我是注释*/}</div>

(2)JSX嵌入变量 

1.当变量是Number、String、Array类型时可以直接显示

2.当变量是null、undefined、Boolean类型时,内容为空

        如果希望可以显示null、undefined、Boolean,那么需要转成字符串

        转换的方式有很多,比如toString方法、和空字符串拼接,String(变量)等

3.对象类型不能作为子元素(not valid as a React child)

    <script type="text/babel">
      class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            // 1、在{}可以正常显示的内容
            name: "why", // String
            age: 18, // Number
            names: ["1", "2", "3"], // Array
            // 2、在{}中不能显示(忽略)
            test1: null,
            test2: undefined,
            test3: true,
            flag: false,
            // 对象不能作为JSX的子类
            friend: {
              name: "hel",
              age: "21",
            },
          };
        }
        render() {
          return (
            <div>
              <h2>{this.state.name}</h2>
              <h2>{this.state.age}</h2>
              <h2>{this.state.names}</h2>

              <h2>{this.state.test1 + ""}</h2>
              <h2>{String(this.state.test2)}</h2>
              <h2>{this.state.test3.toString()}</h2>
              <h2>{this.state.flag ? "显示" : null}</h2>

              <h2>{this.state.friend.name}</h2>
            </div>
          );
        }
      }
      ReactDOM.render(<App />, document.getElementById("app"));
    </script>

 (3)JSX嵌入表达式

    <script type="text/babel">
      class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            firstName: "姓",
            lastName: "名",
            isLogin: true,
          };
        }
        render() {
          const { firstName, lastName, isLogin } = this.state;
          return (
            <div>
              {/*运算符表达式*/}
              <h2>{firstName + lastName}</h2>
              <h2>{20 * 30}</h2>
              {/*三元表达式*/}
              <h2>{isLogin ? "登录成功" : "请先登录"}</h2>
              {/*函数调用*/}
              <h2>{this.getFullName()}</h2>
            </div>
          );
        }
        getFullName() {
          return this.state.firstName + this.state.lastName;
        }
      }
      ReactDOM.render(<App />, document.getElementById("app"));
    </script>

(4)JSX绑定属性

            <div>
              {/* 绑定普通属性 */}
              <h2 title={this.state.title}>我是标题</h2>
              {/* class与关键字重名 需要写成className */}
              <div className="box">我是div</div>
              {/* 动态绑定类 */}
              <div className={"box " + (this.state.active ? "active" : "")}>
                我也是div
              </div>
              {/* 绑定style */}
              <div style={{ color: "red", fontSize: "50px" }}>
                我div要绑定style
              </div>
            </div>

(5)React事件绑定

如果DOM原生有一个监听事件

1、获取DOM原生,添加监听事件

2、在HTML原生,直接绑定onClick

 this处理

    <script type="text/babel">
      class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            msg: "hello",
            counter: 100,
          };
          console.log(this);
          {
            /* bind会生成一个新的函数 重新赋值给btnClick */
          }
          this.btnClick = this.btnClick.bind(this);
        }
        render() {
          return (
            <div>
              {/* 通过bind绑定this(显示绑定) */}
              <button onClick={this.btnClick.bind(this)}>按钮</button>

              {/* 定义函数时,使用箭头函数 */}
              <button onClick={this.increment}>+1</button>

              {/* 直接传入一个箭头函数,在箭头函数中调用需要执行的函数 */}
              <button
                onClick={() => {
                  this.decrement("a");
                }}
              >
                -1
              </button>
            </div>
          );
        }
        btnClick() {
          console.log(this.state.msg);
        }
        // 箭头函数中不绑定this,会去找上一层作用域的this
        // ES6中给对象增加属性: 叫做class fields语法
        increment = () => {
          console.log(this.state.counter);
        };
        decrement(a) {
          console.log(this.state.counter, a);
        }
      }
      ReactDOM.render(<App />, document.getElementById("app"));
    </script>

传递参数

    <script type="text/babel">
      class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            movies: ["1", "2", "3"],
          };
          this.btnClick = this.btnClick.bind(this);
        }
        render() {
          return (
            <div>
              <button onClick={this.btnClick}>按钮</button>
              <ul>
                {this.state.movies.map((item) => {
                  return <li onClick={(e) => this.liClick(e, item)}>{item}</li>;
                })}
              </ul>
            </div>
          );
        }
        btnClick(e) {
          console.log("我点了", e, this.state.movies);
        }
        liClick(e, item) {
          console.log(e, item);
        }
      }
      ReactDOM.render(<App />, document.getElementById("app"));
    </script>

(6) React条件渲染

 常见的条件渲染方式

1、条件判断语句(适合逻辑较多的情况)

2、三元运算符

3、&&(一个条件不成立,后面的条件都不会进行判断)

    <script type="text/babel">
      class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            isLogin: true,
          };
        }
        render() {
          const { isLogin } = this.state;
          const title = isLogin ? "block" : "none";
          // if判断
          let welcome = null;
          let btnText = null;
          if (isLogin) {
            welcome = "登录成功";
            btnText = "退出";
          } else {
            welcome = "请先登录";
            btnText = "登录";
          }

          return (
            <div>
              <h2>{welcome}</h2>
              <button>{btnText}</button>
              <button onClick={(e) => this.loginClick()}>
                {isLogin ? "退出" : "登录"}
              </button>

              <hr />

              <h2>{isLogin && "哈哈哈"}</h2>

              <hr />
              <h2 style={{ display: title }}>实现v-show效果</h2>
              <button onClick={(e) => this.loginClick()}>
                {isLogin ? "消失" : "出现"}
              </button>
            </div>
          );
        }
        loginClick() {
          console.log("点");
          this.setState({
            isLogin: !this.state.isLogin,
          });
        }
      }
      ReactDOM.render(<App />, document.getElementById("app"));
    </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/574897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务组件-反向代理(Nginx)

微服务组件-反向代理(Nginx) Nginx 基本概念 1、nginx是什么&#xff1f; ①、Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务。它是一款轻量级的Web服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&a…

TiDB 6.x 新特性解读 | Collation 规则

对数据库而言&#xff0c;合适的字符集和 collation 规则能够大大提升使用者运维和分析的效率。TiDB 从 v4.0 开始支持新 collation 规则&#xff0c;并于 TiDB 6.0 版本进行了更新。本文将深入解读 Collation 规则在 TiDB 6.0 中的变更和应用。 引 这里的“引”&#xff0c;…

Oracle 监控 SQL 精选 (一)

Oracle数据库的监控通常涉及性能、空间、会话、对象、备份、安全等多个层面。 有效的监控可以帮助 DBA 及时发现和解决问题&#xff0c;提高数据库的稳定性和性能&#xff0c;保障企业的数据安全和业务连续性。 常用的监控指标有&#xff1a; 性能指标&#xff1a; 查询响应时间…

产品推荐 | BittWare基于Altera Agilex“M FPGA的lA-860m加速卡

01 产品概述 BittWare的lA-860m是一款Altera Agilex“M系列FPGA卡&#xff0c;针对吞吐量和内存密集型应用进行了优化。M 系列 FPGA 具有广泛的内存层次结构&#xff0c;包括集成高带宽存储器 &#xff08;HBM2e&#xff09; 和硬内存片上网络 &#xff08;NoC&#xff09;&am…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下&#xff1a; ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

Vivado-IP-DDS and Testbench Learning

DDS内部结构 实现流程 首先新建一个工程&#xff0c;创建bd文件&#xff0c;添加DDS Compiler核&#xff0c;此处不多赘述 Block Design 在观测输出的信号时&#xff0c;需要将最高位符号位的信号取反&#xff0c;这样才能输出正弦波&#xff0c;否则输出的波形如下图所示 将t…

OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法

项目实训一 本实训任务对实验环境要求较高&#xff0c;而且过程比较复杂&#xff0c;涉及的步骤非常多&#xff0c;有一定难度&#xff0c;可根据需要选做。可以考虑改为直接观看相关的微课视频 【实训题目】 增加一个计算节点并进行实例冷迁移 【实训目的】 熟悉增加一个…

实验 1--SQL Server2008数据库开发环境

文章目录 实验 1--SQL Server2008数据库开发环境2.4.1 实验目的2.4.2 实验准备2.4.3 实验内容1.利用 SSMS 访问系统自带的Report Server 数据库。2.熟悉了解 SMSS对象资源管理器树形菜单相关选择项的功能。(1)右键单击数据库Report Server&#xff0c;查看并使用相关功能;(2)选…

K8s: 部署 kubernetes dashboard

部署 Dashboard K8s 官方有一个项目叫 dashboard&#xff0c;通过这个项目更方便监控集群的状态 官方地址: https://github.com/kubernetes/dashboard 通常我们通过命令行 $ kubectl get po -n kube-system 能够查看到集群所有的组件&#xff0c;但这样的方式比较不太直观 …

算法学习002-填数游戏 中小学算法思维学习 信奥算法解析 c++实现

目录 C填数游戏 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C填数游戏 一、题目要求 1、编程实现 在小学奥数中经常会看到一些填数字的游戏&#xff0c;如下图所示&#xff0c;其中每个…

【Web】第三次

【Web】第三次 1.完成学校官方网站页面制作2.使用动画完成过渡变换效果 1.完成学校官方网站页面制作 2.使用动画完成过渡变换效果 1.完成学校官方网站页面制作 html&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://…

OpenCV 实现重新映射

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 实现霍夫圆变换 下一篇 :OpenCV实现仿射变换 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 一个。使用 OpenCV 函数 cv&#xff1a;&#xff1a;remap 实现简单的重新…

Socket编程实验

文章目录 服务端&#xff1a;客户端&#xff1a;使用说明&#xff1a;封装后服务端&#xff1a;封装后客户端 听学弟学妹们反馈&#xff0c;好像老师发的socket编程实验指导里的代码跑不起来。 今天花了一大把时间写了下socket编程代码 现在附上能跑的c代码&#xff1a; 最重要…

nosql数据库 redis

一、介绍 1、redis与mysql的区别&#xff1a; Redis是一种基于键值对的内存数据库&#xff0c;数据存储在内存中&#xff0c;因此读写速度非常快。它支持多种数据结构&#xff0c;如字符串、哈希、列表等。 MySQL是一种关系型数据库&#xff0c;数据以表格的形式组织存储在磁…

12.6.1 实验5:IOS恢复

1、实验目的 通过本实验可以掌握&#xff1a; copy方式恢复IOS的步骤。TFTPDNLD方式恢复IOS的步骤。Xmodem方式恢复IOS的步骤。 2、实验拓扑 路由器IOS恢复的实验拓扑如下图所示。 3、实验步骤 如果工作中不慎误删除路由器IOS&#xff0c;或者升级了错误版本的IOS&#xff…

Sylar C++高性能服务器学习记录06 【线程模块-代码分析篇】

早在19年5月就在某站上看到sylar的视频了&#xff0c;一直认为这是一个非常不错的视频&#xff0c;还有幸加了sylar本人的wx&#xff0c;由于本人一直是自学编程&#xff0c;基础不扎实&#xff0c;也没有任何人的督促&#xff0c;没能坚持下去&#xff0c;每每想起倍感惋惜。恰…

机器学习day3

一、距离度量 1.欧氏距离 2.曼哈顿距离 3.切比雪夫距离 4.闵可夫斯基距离 二、特征与处理 1.数据归一化 数据归一化是一种将数据按比例缩放&#xff0c;使之落入一个小的特定区间的过程。 代码实战 运行结果 2.数据标准化 数据标准化是将数据按照其均值和标准差进行缩放的过…

2024最新版JavaScript逆向爬虫教程-------基础篇之面向对象

目录 一、概念二、对象的创建和操作2.1 JavaScript创建对象的方式2.2 对象属性操作的控制2.3 理解JavaScript创建对象2.3.1 工厂模式2.3.2 构造函数2.3.3 原型构造函数 三、继承3.1 通过原型链实现继承3.2 借用构造函数实现继承3.3 寄生组合式继承3.3.1 对象的原型式继承3.3.2 …

paddle ocr v4 微调训练文字识别模型实践

识别步骤参考&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md 微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md 训练必要性 原始模型标点符号和括号容易识别不到 数据准备…

【漏洞复现】Weblogic 任意文件上传漏洞(CVE-2018-2894)

漏洞简介 Oracle在7月更新中&#xff0c;修复了Weblogic Web Service Test Page中一处任意文件上传漏洞&#xff0c;Web Service Test Page在"生产模式"下默认不开启&#xff0c;所以该漏洞有一定限制&#xff0c;利用该漏洞&#xff0c;可以上传任意.jsp文件&#x…