React高阶学习(二)

chatgpt/2023/9/27 16:02:12

目录

  • 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.exyb.cn/news/show-5313246.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

DAY47 打家劫舍

class Solution { public: int rob(vector<int>& nums) { if(nums.size()1) return nums[0]; vector<int> dp(nums.size(),0); dp[0]nums[0]; dp[1]max(nums[0],nums[1]); for(int i2;i<nums.size();i){ dp[i]max(dp[i-2]nums[i],dp[i-1]); } return dp[n

Bash配置文件

当Bash以登录Shell启动的时候&#xff0c;会首先读取并执行文件“/etc/profile”中的命令。 接着&#xff0c;Bash会依次查找文件“~/.bash_profile”&#xff0c;“~/.bash_login”&#xff0c;“~/.profile”&#xff0c;读取并执行找到的第一个文件中的命令。也就是说&…

nginx rtmp http_flv直播推流

安装配置nginx yum install epel-release -y sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm yum install ffmpeg ffmpeg-devel -y yum install gcc -y yum install pcre pcre-devel -y yum install openssl open…

TDengine时区设置

一般来说&#xff0c;时序数据就是带有时间序列属性的数据。在处理时序数据时&#xff0c;TDengine有着自己独特的方式。但是如果没有正确理解TDengine在写入和查询上的行为&#xff0c;极可能会因为配置了错误的时区&#xff08;timezone&#xff09;&#xff0c;而导致写入和…

【机器学习】西瓜书学习心得及课后习题参考答案—第3章线性模型

过了一遍第三章&#xff0c;大致理解了内容&#xff0c;认识了线性回归模型&#xff0c;对数几率回归模型&#xff0c;线性判别分析方法&#xff0c;以及多分类学习&#xff0c;其中有很多数学推理过程以参考他人现有思想为主&#xff0c;没有亲手去推。 术语学习 线性模型 l…

【Ajax】笔记-原生jsonp跨域请求案例

原生jsonp跨域请求 输入框&#xff1a;输入后&#xff0c;鼠标移开向服务端发送请求&#xff0c;返回用户不存在(直接返回不存在&#xff0c;不做判断) JS <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><me…

【kubernetes系列】flannel之vxlan模式分析

概述 在Kubernetes中要保证容器之间网络互通&#xff0c;网络至关重要。而Kubernetes本身并没有自己实现容器网络&#xff0c;而是而是借助CNI标准&#xff0c;通过插件化的方式自由接入进来。在容器网络接入进来需要满足如下基本原则&#xff1a; Pod无论运行在任何节点都可…

Gitlab 合并分支与请求合并

合并分支 方式一&#xff1a;图形界面 使用 GitGUI&#xff0c;右键菜单“GitExt Browse” - 菜单“命令” - 合并分支 方式二&#xff1a;命令行 在项目根目录下打开控制台&#xff0c;注意是本地 dev 与远程 master 的合并 // 1.查看本地分支&#xff0c;确认当前分支是否…
推荐文章