前端学习--React(1)

一、React简介

React由Meta公司研发,是一个用于 构建Web和原生交互界面的库

优势:组件化开发、不错的性能、丰富生态(所有框架中最好)、跨平台(web、ios、安卓)

开发环境搭建

打开相应文件夹 新建终端并输入

npx create-react-app react1

就可以得到一个名为react1 的项目

运行一下↓

在package.json中,这是两个核心依赖包

"react": "^18.2.0",
"react-dom": "^18.2.0",

 下面是可以执行的命令,开发阶段执行start,开发完毕打包执行build

"scripts": {"start": "react-scripts start","build": "react-scripts build","test": "react-scripts test","eject": "react-scripts eject"},

所有的开发工作在src中执行,最开始只保留App.js和index.js即可

然后精简一下App.js和index.js

//index.js//项目入口
//导入必要的核心包
import React from 'react';
import ReactDOM from 'react-dom/client';
//导入项目根组件
import App from './App';
//把App根组件渲染到index.html中id为root的dom节点上
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />
);
//App.js
//项目根组件
function App() {return (<div className="App">this is react</div>);
}export default App;

二、JSX基础

JSX基础和概念

JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构,它是React中编写 UI模版的方式

既具有HTML声明式写法,又有JS的可编程能力

JSX在原生JS中无法被识别,那如何渲染到浏览器中?

JSX本质

是js语法扩展,需要解析工具(babel)才能在浏览器中运行

Babel · Babel (babeljs.io)

 JSX场景

jsx可以通过{}识别js表达式,有以下四种情况:

1. 使用引号传递字符串

2. 使用JavaScript变量

3. 函数调用和方法调用

4. 使用JavaScript对象

function printName(){return 'Rose'
}function App() {const count = 1000return (<div className="App">{/*1 使用引号传递字符串 */}{'this is react project'}{/* 2 识别js变量 */}{count}{/* 3 函数调用 */}{printName()}{/* 4 方法调用 */}{new Date().getDate()}{/* 5 使用js对象 */}{/* 外层花括号是识别表达式的语法,内层是对象结构 */}<div style={{color : 'red'}}>this is red color</div></div>);
}export default App;

 

JSX列表渲染

核心方法是map,循环哪个结构就在map里return哪个结构,不要忘记每个循环元素都要有唯一标识key

const list = [{name:'Alice',id:1001},{name:'Bob',id:1002},{name:'Candy',id:1003}
]function App() {return (<div className="App">this is a list<ul>{list.map(item => <li key={item.id}>{item.name}</li>)}</ul></div>);
}

JSX条件渲染

基础情况

可以通过逻辑与&&(控制一个元素)和三元表达式:?(两个元素)实现基础的条件渲染

const showSpan = true
function App() {return (<div className="App">{/* 逻辑& */}{showSpan && <span>hello</span>}{/* 三元表达式 */}{showSpan ? <span> showSpan为true</span> : <span>showSpan为false</span>}</div>);
}

复杂情况

用if-else

const type = 1
function getType(){if(type === 1){return <div>我是1</div>}else if(type === 2){return <div>我是2</div>}else{return <div>我是3</div>}
}
function App() {return (<div className="App">{/* 逻辑& */}{getType()}</div>);
}

三、事件绑定

 on + 事件名称 = { 事件处理程序 },整体上遵循驼峰命名

function App() {let count = 0const handleClick = () => {count ++console.log('button被点击了'+count)}return (<div className="App"><button onClick={handleClick}> click </button></div>);
}

如果是自定义参数,要写成箭头函数

<button onClick={() => handleClick(1)}> click </button>

事件对象e和自定义参数都需要

<button onClick={(e) => handleClick(e, 1)}> click </button>

 四、React组件

在不同的前端框架,组件是通用概念,组件之间可以嵌套也可以复用

const Button = () => {return <button>Click</button>
}
function App() {return (<div className="App"><Button></Button><Button/></div>);
}

五、useState

useState 是一个 React Hook(函数),它允许我们向组件添加一个状态变量, 从而控制影响组件的渲染结果

即数据驱动视图

下面是一个典型自增按钮

import { useState } from "react";
function App() {//count是状态变量, setCount是修改变量的方法 每次修改count必须调用setCountconst [count, setCount] = useState(0)const handleClick = () => {setCount(count + 1)}return (<div className="App"><button onClick={handleClick}>{count}</button></div>);
}

react中的状态只读,每次应该通过修改状态的函数来替换,直接修改不能引发视图更新

修改对象属性

import { useState } from "react";
function App() {const [student, setStu] = useState({name:'Jack',age:20})const handleClick2 = () => {setStu({...student, //这一行保留,那么只修改name一个属性,反之原有属性都会被覆盖掉name:'XiaoMing'})console.log(student)}return (<div className="App"><button onClick={handleClick2}>{student.name}</button></div>);
}

六、组件样式处理

行内样式

const style = {color:'pink',fontWeight:'700',fontSize:'20px'
}
function App() {return (<div className="App"><span style={style}> 11 </span></div>);
}

class类名控制

//index.css
.fc-lightblue{color: lightblue;
}//index.js
import './index.css'
function App() {return (<div className="App"><span className='fc-lightblue'> 11 </span></div>);
}

案例应用

lodash数组排序

Lodash Documentation

npm i lodash

_.orderBy(collection, [iteratees=[_.identity]], [orders])
//参数分别是 要排序的数组 排序参照属性 排序方法(asc/desc)

classnames动态控制类名

npm i classnames

import classNames from 'classnames'<span className={classNames('class1', {class2: type === item.type})}>{item.text}
</span>

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

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

相关文章

QT修改windowTitle的名字以及图片

1.修改名字:点击ui的QMainWindow,然后找到windowTitle的选项修改即可 2.修改windowTitle的图片,依旧是找到windowIcon,选择资源,这个资源可以是你放到qrc里面的图片也可以是外置的图片 3.然后运行就可以看到效果了

行情分析——加密货币市场大盘走势(11.21)

大饼昨日笔者已经离场&#xff0c;目前下跌形态破坏&#xff0c;等待机会再入场&#xff0c;下跌是必然的&#xff0c;只是现在从MACD日线来看是要上涨的&#xff0c;上涨趋势没有打破&#xff0c;等待机会入场。 MACD日线多单策略&#xff1a;入场37500 止盈38000-38600 止损…

OceanBase:OBServer节点管理

目录 1.查看节点 2.添加节点 2.1 创建数据目录 2.2.OceanBase 运行时所依赖的部分三方动态库 2.3.安装 OceanBase 数据库的 RPM 包 2.4.启动节点 observer 进程 2.5.向集群中添加节点 3.隔离节点 4.重启节点 4.1 停止服务 4.2 转储 4.3 关闭进程 4.4 启动进程 4.…

gitBash中如何使用Linux中的tree命令

文章目录 在gitBash中安装tree的目的如何安装安装完成,就可以直接完美适配Linux系统了在gitBash中安装tree的目的 如下图,powershell虽然可以看做是window下的Linux系统,但是根本就不适配很多Linux中的命令 如何安装 tree.exe安装网址 下载 tree 命令的 二进制包,安装 tr…

腾讯极光盒子A4021增强版_线刷官方

1、用USB_Burning_Tool线刷提供的线刷包&#xff0c;所需资料地址在最后 1&#xff09;打开USB_Burning_Tool&#xff0c;选择资料里的A4021_line_flash_root.img&#xff08;文件夹最好没有中文字符和空格&#xff09;&#xff0c;然后点击【开始】。 2&#xff09;盒子准备好…

【C++上层应用】3. 动态内存

文章目录 【 1. new和delete运算符 】1.1 new 分配内存1.2 delete 释放内存1.3 实例 【 2. 数组的动态内存分配 】2.1 一维数组2.2 二维数组2.3 三维数组 【 3. 对象的动态内存分配 】 C 程序中的内存分为两个部分&#xff1a; 栈&#xff1a;在 函数内部 声明的所有变量都将占…

Me-and-My-Girlfriend-1

Me-and-My-Girlfriend-1 一、主机发现和端口扫描 主机发现&#xff0c;靶机地址192.168.80.147 arp-scan -l端口扫描&#xff0c;开放了22、80端口 nmap -A -p- -sV 192.168.80.147二、信息收集 访问80端口 路径扫描 dirsearch -u "http://192.168.80.147/" -e * …

浪潮信息云峦服务器操作系统KeyarchOS体验与实践

写在前面 大家好我是网络豆&#xff0c;一名云计算运维人员&#xff0c;本文将会带大家体验一下浪潮信息服务器操作系统云峦KeyarchOS。看看浪潮信息服务器操作系统云峦KeyarchOS的优势与实践操作如何。 背景了解 KeyarchOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术…

【Element】el-progress 自定义进度条

一、背景 要求弹窗内显示进度条&#xff0c;根据接口获取当前进度值&#xff0c;间隔5秒调用接口获取最新进度值&#xff0c;当进度值为100时&#xff0c;允许关闭进度条弹窗 二、效果 三、实现步骤 3.1、按钮绑定事件&#xff0c;打开弹窗 <el-button class"cance…

接入电商数据平台官方开放平台API接口获取商品实时信息数据,销量,评论,详情页演示

要接入电商数据平台官方开放平台API接口获取商品实时信息数据、销量、评论和详情页演示&#xff0c;需要按照以下步骤进行操作&#xff1a; 找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。可以在电商数据平台的官方开放平台上查找相应的AP…

python tkinter 使用

python tkinter 使用 ython可以使用多种GUI库来创建窗口页面&#xff0c;例如Tkinter、PyQt、wxPython等。 本篇文章主要讲述如何使用tkinter。 1&#xff1a;导入 import tkinter as tk这时如果运行的话会提示&#xff1a; ModuleNotFoundError: No module named ‘tkint…

弄懂Rust编程中的Trait

1.定义 trait trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。 一个类型的行为由其可供调用的方法构成。如果可以对不同类型调用相同的方法的话&#xff…

机器人制作开源方案 | 莲花灯

1. 功能描述 莲花灯是一款基于莲花形象设计的机器人&#xff0c;本文示例将用两种模式来实现莲花灯的亮灭功能。 自主模式&#xff1a;用 光强传感器 控制莲花灯的灯叶开合。暗光情况下灯叶打开&#xff0c;灯亮&#xff1b;强光情况下灯叶闭合&#xff0c;灯灭。 …

webpack环境变量的设置

现在虽然vite比较流行&#xff0c;但对于用node写后端来说&#xff0c;webpack倒是成了一个很好的打包工具&#xff0c;可以很好的保护后端的代码。所以这块的学习还是不能停下来&#xff0c;接下来我们来针对不同的环境做不同的设置写好笔记。 引用场景主要是针对服务器的各种…

0时区格林威治时间转换手机当地时间-Android

假设传入的是2023-11-01T12:59:10.420987这样的格式 要将格式为2023-11-01T12:59:10.420987的UTC时间字符串转换为Android设备本地时间&#xff0c;您可以使用java.time包中的类&#xff08;在API 26及以上版本中可用&#xff09;。如果您的应用需要支持较低版本的Android&…

docker通过挂载conf文件启动redis

初衷&#xff1a;之前直接在启动脚本中没有挂载配置文件&#xff0c;并且直接设置了密码等&#xff0c;后续要使用集群&#xff0c;苦于无法修改配置&#xff0c;进入redis容器也找不到redis.conf&#xff0c;所以写这个文章用来使用redis的配置&#xff0c;来达到后续都可动态…

《微信小程序开发从入门到实战》学习二十四

3.3.12开发创建投票多选投票页面 创建投票多选投票页面和创建单选投票页面没有区别&#xff0c;唯一区别仅在于向服务端发送数据时&#xff0c;告诉服务器这个投票是什么类型的投票。这个类型用三种数据类型表示都可以&#xff0c;分别如下所示&#xff1a; multiple:true/fa…

阿里 OSS鉴权访问文件

如果OSS文件设置保护&#xff0c;需要鉴权才能访问&#xff0c;添加请求头鉴权&#xff0c;SDK方法如上&#xff1b; 将鉴权信息和地址、时间返回给前端&#xff0c;前端直接从oss上读取 String filePath "/admin/2023/6/183569314928918546.png"; RequestMessage…

【C++上层应用】6. 信号 / 中断

文章目录 【 1. signal 函数 】【 2. raise函数 】 信号是由操作系统传给进程的 中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。有些信号不能被程序捕获&#xff0c;但是下表所列信号可以在程序中捕…

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…