React高阶学习(二)

目录

  • 1. 基本概念和语法
  • 2. 组件化开发
  • 3. 状态管理
  • 4. 生命周期钩子
  • 5. 条件渲染
  • 6. 循环渲染
  • 7. 事件处理
  • 8. 组件间通信
  • 9. 动画效果
  • 10. 模块化开发

1. 基本概念和语法

React 是基于 JavaScript 的库,用于构建用户界面。它采用虚拟 DOM 技术,能够高效地渲染页面。React 的基本语法包括 JSX、组件、状态管理和生命周期钩子等。
示例:

import React from 'react';
class App extends React.Component {  constructor(props) {  super(props);  this.state = {  count: 0  };  }handleClick = () => {  this.setState({ count: this.state.count + 1 });  };render() {  return (  <div>  <h1>点击次数:{this.state.count}</h1>  <button onClick={this.handleClick}>点击我</button>  </div>  );  }  
}
export default App;  

2. 组件化开发

React 采用组件化的方式来构建 UI。一个组件可以包含一个或多个 HTML 标签,以及 JavaScript 代码来控制它们的行为。组件可以拥有自己的状态和生命周期钩子,这使得它们可以更加灵活地响应用户交互和数据变化。
示例:

import React from 'react';
class Button extends React.Component {  constructor(props) {  super(props);  this.state = {  color: 'blue'  };  }handleClick = () => {  this.setState({ color: 'red' });  };render() {  return (  <button style={{ color: this.state.color }} onClick={this.handleClick}>  点击我  </button>  );  }  
}
export default Button;  

3. 状态管理

React 的状态管理是指将组件的状态与父组件的状态进行管理。通过在父组件中传递状态向下传递,或者通过在子组件中使用 context API 向上传递状态,可以实现状态的管理。
示例:

import React, { useState } from 'react';
const App = () => {  const [count, setCount] = useState(0);const handleClick = () => {  setCount(count + 1);  };return (  <div>  <h1>点击次数:{count}</h1>  <button onClick={handleClick}>点击我</button>  </div>  );  
};
export default App;  

4. 生命周期钩子

React 的生命周期钩子是指在组件的生命周期中执行的一些函数。它们允许你在组件的不同阶段执行代码,例如在组件刚刚被创建时、组件被更新时、组件被销毁时等。
示例:

import React from 'react';
class App extends React.Component {  constructor(props) {  super(props);  this.state = {  count: 0  };  }componentDidUpdate(prevProps) {  if (prevProps.count!== this.props.count) {  console.log('组件更新,计数器变化');  }  }render() {  return (  <div>  <h1>点击次数:{this.state.count}</h1>  <button onClick={this.props.onClick}>点击我</button>  </div>  );  }  
}
export default App;  

5. 条件渲染

React 的条件渲染是指根据某些条件来选择性地渲染组件。React 提供了 if-else 语句和逻辑表达式来实现条件渲染。
示例:

import React from 'react';
const App = () => {  const [count, setCount] = useState(0);return (  <div>  {count > 0 && (  <h1>点击次数:{count}</h1>  )}  <button onClick={() => setCount(count + 1)}>点击我</button>  </div>  );  
};
export default App;  

6. 循环渲染

React 的循环渲染是指通过遍历数组来重复地渲染组件。React 提供了 map 方法来实现循环渲染。map 方法接受一个函数作为参数,该函数返回一个数组,数组的元素是该函数对数组中每个元素调用后的返回值。
示例:

import React from 'react';
const App = () => {  const list = ['a', 'b', 'c'];return (  <div>  <ul>  {list.map((item, index) => (  <li key={index}>{item}</li>  ))}  </ul>  </div>  );  
};
export default App;  

在上面的示例中,我们通过使用 list 数组的 map 方法来遍历数组并渲染 li 标签。每个 li 标签都包含数组中的每个元素。我们还使用 key 属性来为每个 li 标签提供唯一标识,以便在渲染时进行优化。

7. 事件处理

React 的事件处理是指在组件中处理用户交互事件,例如点击、键盘输入等。React 提供了 onClick、onKeyDown、onChange 等事件处理方法来处理各种事件。
示例:

import React from 'react';
const App = () => {  const [count, setCount] = useState(0);return (  <div>  <button onClick={() => setCount(count + 1)}>点击我</button>  <p>计数器:{count}</p>  </div>  );  
};
export default App;  

在上面的示例中,我们通过使用 onClick 事件处理方法来处理用户点击按钮的事件。每当用户点击按钮时,setCount 函数会将计数器值加 1,并更新页面上的计数器显示。

8. 组件间通信

React 的组件间通信是指在组件之间传递数据、事件和状态等信息。React 提供了 props、context、state 和 ref 等方法来实现组件间通信。
示例:

import React, { useState } from 'react';
const App = () => {  const [count, setCount] = useState(0);return (  <div>  <button onClick={() => setCount(count + 1)}>点击我</button>  <p>计数器:{count}</p>  </div>  );  
};
export default App;  

在上面的示例中,我们通过使用 props 将计数器值传递给父组件,然后通过 useState 钩子在子组件中更新计数器值。每当用户点击按钮时,setCount 函数会将计数器值加 1,并更新页面上的计数器显示。

9. 动画效果

React 的动画效果是指在组件中实现动画效果,例如过渡、旋转、缩放等。React 提供了 CSS 和 JS 动画效果来实现动画。
示例:

import React from 'react';
const App = () => {  const [count, setCount] = useState(0);return (  <div>  <button onClick={() => setCount(count + 1)}>点击我</button>  <p>计数器:{count}</p>  </div>  );  
};
export default App;  

在上面的示例中,我们通过使用 CSS 过渡效果来实现按钮的动画效果。每当用户点击按钮时,setCount 函数会将计数器值加 1,并更新页面上的计数器显示。同时,按钮会根据计数器值逐渐改变颜色,实现动画效果。

10. 模块化开发

React 的模块化开发是指将应用程序拆分为多个模块,然后通过 import 语句将这些模块导入到应用程序中。React 提供了 import、export 和 module 等关键词来实现模块化开发。
通过模块化开发,可以提高应用程序的可维护性、可扩展性和可重用性。模块化开发可以使代码更加结构化、易于理解和维护,同时也可以避免代码重复和冲突。
在 React 中,可以使用 JSX 语法来定义模块,然后在其他组件中通过 import 语句导入这些模块。例如:

// 定义一个模块 called "MyModule"
import React from 'react';
const MyModule = () => {  return <div>Hello, MyModule!</div>;  
};
export default MyModule;
// 在其他组件中导入这个模块
import React from 'react';  
import MyModule from './MyModule';
const App = () => {  return (  <div>  <MyModule />  </div>  );  
};
export default App;  

在上面的示例中,我们定义了一个名为 “MyModule” 的模块,然后在其他组件中通过 import 语句导入了这个模块。在导入模块后,我们可以在组件中使用模块中的代码,例如在 App 组件中使用 MyModule 组件。
除了使用 import 语句导入模块外,还可以使用 export 语句来导出模块。通过 export 语句,可以将模块中的代码暴露出去,以便其他应用程序可以使用该模块。例如:

// 定义一个模块 called "MyModule"
import React from 'react';
const MyModule = () => {  return <div>Hello, MyModule!</div>;  
};
export default MyModule;
// 在其他组件中导入这个模块
import React from 'react';  
import MyModule from './MyModule';
const App = () => {  return (  <div>  <MyModule />  </div>  );  
};
export default App;  

在上面的示例中,我们定义了一个名为 “MyModule” 的模块,并通过 export 语句将该模块导出。然后在其他组件中通过 import 语句导入了这个模块,并在组件中使用模块中的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-authorization-server (1.1.1)自定义认证

前言 注意&#xff1a;我本地没有生成公钥和私钥&#xff0c;所以每次启动项目jwkSource都会重新生成&#xff0c;导致之前认证的token都会失效&#xff0c;具体如何生成私钥和公钥以及怎么配置到授权服务器中&#xff0c;网上有很多方法自行实现即可 之前有个项目用的0.0.3的…

Vue(待续)

概念 一套用于构建用户界面的渐进式JavaScript框架 Vue可以自底向上逐层的应用&#xff1a; 简单应用:只需一个轻量小巧的核心库。 复杂应用:可以引入各式各样的Vue插件。 1.采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护。 2.声明式编码&#xff0c;让编码人员…

【设计模式——学习笔记】23种设计模式——装饰器模式Decorator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 生活案例咖啡厅 咖啡定制案例 装饰者模式介绍介绍出场角色 案例实现案例一&#xff08;咖啡厅问题&#xff09;类图代码实现咖啡样式拓展代码实现 案例二类图代码实现 装饰着模式在IO流源码的应用总结什么是父类和子类的一致性如何让自己和被委托对象有一致性 文章说明…

深度学习和神经网络

人工神经网络分为两个阶段&#xff1a; 1 &#xff1a;接收来自其他n个神经元传递过来的信号&#xff0c;这些输入信号通过与相应的权重进行 加权求和传递给下个阶段。&#xff08;预激活阶段&#xff09; 2&#xff1a;把预激活的加权结果传递给激活函数 sum :加权 f:激活…

【Linux】UDP协议

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;传输层&a…

初级算法-动态规划

文章目录 爬楼梯题意&#xff1a;解&#xff1a;代码&#xff1a; 买卖股票的最佳时机题意&#xff1a;解&#xff1a;代码&#xff1a; 最大子序和题意&#xff1a;解&#xff1a;代码&#xff1a; 打家劫舍题意&#xff1a;解&#xff1a;代码&#xff1a; 爬楼梯 题意&…

Mysql的锁

加锁的目的 对数据加锁是为了解决事务的隔离性问题&#xff0c;让事务之前相互不影响&#xff0c;每个事务进行操作的时候都必须先加上一把锁&#xff0c;防止其他事务同时操作数据。 事务的属性 &#xff08;ACID&#xff09; 原子性 一致性 隔离性 持久性 事务的隔离级别 锁…

(3)Gymnasium--CartPole的测试基于DQN

1、使用Pytorch基于DQN的实现 1.1 主要参考 (1)推荐pytorch官方的教程 Reinforcement Learning (DQN) Tutorial — PyTorch Tutorials 2.0.1cu117 documentation (2) Pytorch 深度强化学习 – CartPole问题|极客笔记 2.2 pytorch官方的教程原理 待续&#xff0c;这两天时…

bug篇之基于docker安装nacos(2.1.1)使用dubbo连接不上的问题

说明&#xff1a;首先我的nacos安装是2.1.1版本&#xff0c;请注意版本问题。另外启动时用dubbo的话必须先启动服务提供者再启动服务使用者&#xff0c;否则会报错&#xff0c;同时也必须开放三个端口&#xff1a;8848&#xff0c;9848&#xff0c;9849 java.lang.IllegalStat…

Python入门【__init__ 构造方法和 __new__ 方法、类对象、类属性、类方法、静态方法、内存分析实例对象和类对象创建过程(重要)】(十四)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

防止表单的重复提交

思想 打开页面时&#xff0c;生成一个token&#xff0c;将这个token保存到Session中&#xff0c;在表单中提供一个隐藏域&#xff0c;设置其值为每1步中生成的token在处理表单的Servlet中&#xff0c;获取表单隐藏域中的token与Session中的token进行比较&#xff0c;比较完之后…

设计模式——简单工厂模式

1 概述 将创造对象的工作交给一个单独的类来实现 &#xff0c;这个单独的类就是工厂。 2 实现 假设要做一个计算器的需求&#xff0c;通常我们想到的是这样写&#xff1a; package com.example.easyfactory;import java.util.Scanner;public class Demo1 {public static vo…

spring学习笔记十五

Spring整合Mybatis 1、导入pom坐标 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><!-- https://mvnrepository.com/artifact/c3p0/c3p0 --><!…

SpringBoot Jackson 日期格式化统一配置

目录 1.在全局配置文件配置 2.通过JavaBean方式配置 1.在全局配置文件配置 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 该配置方式仅支持 Date 类型的日期格式化&#xff0c;不支持LocalDate 及 LocalDateTime 的格式化。 2.通过JavaBean方式配置 …

[C++] 类与对象(上)

目录 1、前言 2、类的引入 3、类的定义 3.1 类的两种定义方式 4、类的访问限定符 5、类的作用域 6、类的实例化 7、类对象模型 7.1 内存对齐规则 7.1 类对象的存储方式 8、this指针 8.1 this指针的特性 8.2 this指针是否可以为空 1、前言 C语言是面向过程的&#…

DUBBO服务多网卡,服务调用失败

如果服务器是多网卡的&#xff0c;比如安装了docker&#xff0c;有一个docker虚拟网卡&#xff0c;一个实体网卡eth0&#xff0c;当我们运行springboot应用后&#xff0c;dubbo注入到zk的地址是 docker虚拟网卡的地址172网段&#xff0c;而不是实际内网地址192网段&#xff0c;…

类的封装和包(JAVA)

封装 所有的OOP语言都会有三个特征&#xff1a; 封装&#xff1b;继承&#xff1b;多态。 本篇文章会为大家带来有关封装的知识。 在我们日常生活中可以看到电视就只有那么几个按键&#xff08;开关&#xff0c;菜单……&#xff09;和一些接口&#xff0c;而而我们通过这些东…

【计算机视觉|人脸建模】SOFA:基于风格、由单一示例的2D关键点驱动的3D面部动画

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks 链接&#xff1a;SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks | Proceedings of …

jmeter压力测试指标解释

目录 RT(response time) Throughput 吞吐量 并发用户数 QPS (query per seconds) TPS (transition per seconds) PV和UV 聚合报告&#xff1a; RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能…

什么是云原生和 CNCF?

一、CNCF简介 CNCF&#xff1a;全称Cloud Native Computing Foundation&#xff08;云原生计算基金会&#xff09;&#xff0c;成立于 2015 年 12 月 11 日&#xff0c;是一个开源软件基金会&#xff0c;它致力于云原生&#xff08;Cloud Native&#xff09;技术的普及和可持续…