【前端知识】React简单入门
React语法介绍
- 概述
- 一、产生背景与发展历程
- 二、主要特点
- 三、技术细节
- 四、应用场景与优势
- 五、学习与实践
- JSX语法
- 一、JSX的基本概念
- 二、JSX的基本使用
- 三、JSX中的JavaScript表达式
- 四、JSX的条件渲染
- 五、JSX的列表渲染
- 六、JSX的样式处理
- 七、JSX的其他注意事项
- 基础语法
- 一、基础概念
- 二、核心语法
- 三、组件生命周期(class组件)
- 四、样式设置
- 自定义组件
- 1. 创建函数组件
- 2. 使用类组件
- 3. 使用自定义组件
- 4. 传递 Props
- 5. 使用 CSS 样式
- 使用内联样式
- 使用 CSS 类
- 6. 高阶组件(HOC)
- 7. 使用 Hooks
- 完整例子
- 1. 初始化项目
- 2. 创建组件
- Login.js
- Quiz.js
- 3. 应用样式
- Login.css
- Quiz.css
- 4. 修改App.js
- 5. 运行应用
- 总结
概述
React是一个用于构建用户界面的JavaScript库,由Meta(前身为Facebook)开发。以下是对React的详细介绍:
一、产生背景与发展历程
- 产生背景:React起源于Facebook的内部项目,该公司对市场上所有JavaScript MVC框架都不满意,因此决定自行开发一套用于架设Instagram的网站。
- 发展历程:React的早期原型被称为“FaxJS”,由Facebook工程师Jordan Walke开发。React于2011年首次亮相,首次用于Facebook的Newsfeed。第二年在Instagram中使用。2013年5月,React在美国JSConf上开源。随着时间的推移,React项目逐渐壮大,从最初的UI引擎发展成为一整套前后端通吃的Web App解决方案。
二、主要特点
- 声明式设计:React使创建交互式用户界面变得简单。开发者可以为应用的每一个状态设计简洁的视图,当数据变动时,React能高效更新并渲染合适的组件。
- 组件化:React鼓励构建管理自身状态的封装组件,然后对这些组件进行组合以构成复杂的用户界面。这种组件化的开发方式有助于代码的复用和维护。
- 高效:React通过引入虚拟DOM的概念,最大限度地减少了与真实DOM的交互。虚拟DOM是一个在内存中构建的DOM树,当状态更新时,React会先比较虚拟DOM和真实DOM的差异,然后只更新那些发生变化的部分,从而提高了性能。
- 灵活:React非常灵活,可以与其他技术栈结合使用。开发者无需重写现有代码,只需引入React即可开发新功能。
三、技术细节
- 虚拟DOM:React使用虚拟DOM来提高性能。虚拟DOM是一个轻量级的JavaScript对象,它描述了真实DOM的结构。当React需要更新界面时,它会先更新虚拟DOM,然后比较虚拟DOM和真实DOM的差异,并据此更新真实DOM。
- JSX:JSX是React的一种语法扩展,它允许在JavaScript代码中写HTML标签。JSX使得在React中描述用户界面变得更加直观和方便。
- 组件生命周期:React组件具有生命周期,包括挂载(Mounting)、更新(Updating)、卸载(Unmounting)和错误处理(Error Handling)等阶段。在每个生命周期阶段,React都会提供特定的钩子函数供开发者使用,以实现特定的功能。
四、应用场景与优势
-
应用场景:React适用于构建单页面应用(SPA)、移动应用(通过React Native)、服务器端渲染(SSR)等场景。
-
优势:
- 性能优越:由于引入了虚拟DOM和高效的更新机制,React在性能上表现出色。
- 组件化开发:组件化开发方式使得代码更加模块化、可复用性和可维护性更高。
- 生态系统丰富:React拥有庞大的社区和丰富的生态系统,提供了大量的第三方库和工具供开发者使用。
五、学习与实践
- 学习资源:React的官方文档是学习React的最佳起点。此外,还可以参考各种在线教程、书籍和视频课程等资源。
- 实践项目:通过参与实际项目或自己动手搭建项目来加深对React的理解和应用能力。实践过程中可以遇到并解决各种问题,从而不断提升自己的技能水平。
综上所述,React是一个功能强大且灵活的JavaScript库,适用于构建各种类型的用户界面。通过学习和实践React,开发者可以掌握现代前端开发的核心技能并提升自己的竞争力。
JSX语法
JSX(JavaScript XML)是一种在JavaScript中编写类似XML的语法扩展,常用于React等库中描述用户界面。以下是对JSX语法的详细解析:
一、JSX的基本概念
- 定义:JSX是JavaScript XML(HTML)的缩写,表示在JavaScript代码中书写HTML结构。
- 特性:JSX并不是标准的JavaScript语法,而是JavaScript的语法扩展。浏览器默认是不识别JSX的,但在React项目的脚手架中,通常会内置@babel/plugin-transform-react-jsx包来解析该语法。
二、JSX的基本使用
- 标签闭合:JSX标签必须闭合,无论是自闭合标签还是包含子元素的标签。例如,
<div>
需要对应的</div>
来闭合,而像<img />
或<br />
这样的自闭合标签则以斜杠/
结尾。 - 根标签:JSX中只能有一个根元素。如果需要渲染多个元素,可以将它们包裹在一个父元素中,如
<div>
。 - 表达式插值:在JSX中,可以将JavaScript表达式放在大括号
{}
中,以在渲染时插入动态内容。这些表达式可以是变量、函数返回值、计算表达式等。但需要注意的是,在JSX中只能嵌入表达式,不能嵌入语句(如if语句、for循环等)。
三、JSX中的JavaScript表达式
-
嵌入表达式:在JSX中,可以使用大括号
{}
来嵌入JavaScript表达式。例如,const name = '云墨卿'; return ( <div>你好,{name}</div> );
。 -
注意事项:
- 单大括号中可以是任意的JavaScript表达式,如三元表达式、加减乘除、数组、字符串等。
- 单大括号中不能出现语句(例如if/for等)。
- JavaScript对象一般只会出现在style属性中。
四、JSX的条件渲染
- 实现方式:虽然不能在JSX中直接写if/else判断,但可以嵌入函数表达式。在函数表达式中进行if/else判断,或者使用三元运算符来实现条件渲染。
- 示例:
const flag = true; {flag ? <div>true显示</div> : <div>false显示</div>}
,或者使用逻辑与运算符flag && <div>true显示</div>
。
五、JSX的列表渲染
- 实现方式:可以使用JavaScript数组的
map()
方法来遍历数组,并为每个元素生成对应的JSX元素,从而实现列表渲染。 - 注意事项:遍历列表时,需要为每个列表项提供一个唯一的key属性,以提高页面性能。key属性只在内部使用,不会出现在真实的DOM中。
- 示例:
const list = [{ id: 1, name: 'JavaScript' },{ id: 2, name: 'Vue' },{ id: 3, name: 'React' },{ id: 4, name: 'Angular' }
];return (<ul>{list.map((item) => (<li key={item.id}>{item.name}</li>))}</ul>
);
六、JSX的样式处理
- 内联样式:为元素设置内联样式时,需要使用
style
属性,并传递一个包含CSS属性的JavaScript对象。CSS属性名需要使用驼峰命名法(camelCase),而不是短横线命名法(kebab-case)。 - 类名:在JSX中,由于
class
是JavaScript的保留字,因此为元素添加类名时需要使用className
属性。 - 动态类名:可以使用JavaScript表达式来动态地添加或移除类名。例如,
<div className={isActive ? 'active' : ''}>
。
七、JSX的其他注意事项
- 组件命名:当使用JSX定义组件时,如果组件名以大写字母开头,React会将其视为一个组件并尝试渲染它;如果以小写字母开头,React则会将其视为一个HTML标签。
- 组件引用:在JSX中引用组件时,需要确保组件已经被定义并且可以在当前作用域内被访问到。
- 避免直接使用JavaScript语句:如前所述,JSX中只能嵌入表达式,不能嵌入语句。如果需要执行复杂的逻辑,可以在渲染JSX之前先计算好需要渲染的内容。
- 性能优化:在大型项目中,需要注意JSX的渲染性能。可以通过使用React的
React.memo
、useMemo
、useCallback
等Hook来优化组件的渲染性能。
综上所述,JSX是React等库中的一项重要特性,它使得在JavaScript代码中书写HTML结构变得直观且高效。通过掌握JSX的基本语法和注意事项,可以编写出高效、可维护的React组件。
基础语法
React是一个用于构建用户界面的JavaScript库,其语法详细介绍如下:
一、基础概念
-
JSX:
- JSX是JavaScript语法的扩展,看起来很像XML。React开发不一定使用JSX,但建议使用它。
- 在JSX中,HTML标签用小写字母开头,React组件用大写字母开头。
- HTML标签的属性(如onclick和onchange)在JSX中必须写成小驼峰命名(如onClick)。
- 单标签在JSX中必须闭合。
- 在JSX中,
<img />
标签必须要有alt属性,否则会有警告。 - 在JSX语法中,为了防止和JavaScript关键字冲突,
class
必须写成className
,label
标签中的for
属性必须写成htmlFor
。
-
组件:
- React通过构建组件来使得代码更加容易复用,适用于大项目的开发。
- 组件名的首字母必须大写。
- 组件分为class组件(有状态组件)和函数组件(无状态组件)。
- class组件:通过类的继承来创建,必须继承
React.Component
,必须有render
方法,render
方法中必须返回React元素(JSX)。 - 函数组件:定义一个函数组件就是定义一个函数,建议使用箭头函数,函数的首字母必须大写,函数中必须返回React元素(JSX)。
- class组件:通过类的继承来创建,必须继承
- 有状态组件写起来比较复杂,性能相对较低,但功能更全,可以在组件内部定义组件的状态;无状态组件写起来比较简单,性能相对较高,但功能相对简单,不能在组件内部定义组件的状态。
-
单向响应的数据流:
- React实现了单向响应的数据流,从而减少了重复代码,比传统数据绑定更简单。
二、核心语法
-
状态(State):
- 主要用于更新界面。
- 组件的State属性在生命周期函数
getInitialState
中初始化(class组件),或在组件外部通过useState
钩子初始化(函数组件)。 - 当调用组件的
this.setState
(class组件)或setState
函数(函数组件)改变state时,组件会重新渲染刷新。
-
属性(Props):
- 主要用于组件之间传递数据,即标签的属性。
- 通过
this.props
(class组件)或函数参数(函数组件)访问传递进来的props。
-
事件处理:
- React中的事件绑定没有绑定到具体的DOM节点上,而是采用事件代理的模式绑定在根节点上。
- React模拟了一套事件冒泡机制,通过事件源找到真实触发的元素,然后执行该元素上的事件处理函数。
- 事件处理函数中会传入一个事件对象,该对象和普通的浏览器事件对象所包含的方法和属性基本一致,但它是React自己内部构建的。
三、组件生命周期(class组件)
React组件生命周期分为实例化、实例化完成后的更新、存在期(组件已存在时的状态改变)三个阶段,共提供了10个不同的API:
-
实例化:
getDefaultProps
:作用于组件类,只调用一次,返回对象用于设置默认的props,对于引用值,会在实例中共享。getInitialState
:返回一个对象,用于初始化组件的state。componentWillMount
:组件即将挂载到DOM之前调用,此时render
方法尚未被调用。render
:创建虚拟DOM,该方法具有特殊的规则,如只能通过this.props
和this.state
访问数据,可以返回null、false或任何React组件等。componentDidMount
:组件挂载到DOM后立即调用,此时可以通过ReactDOM.findDOMNode(this)
获取到组件的DOM元素。
-
实例化完成后的更新(更新阶段与实例化阶段调用的生命周期方法相同,但触发时机不同):
- 当组件的props或state发生变化时,会依次调用
getInitialState
、componentWillMount
、render
、componentDidMount
方法,但通常不需要在更新阶段重写getInitialState
和componentWillMount
方法。
- 当组件的props或state发生变化时,会依次调用
-
存在期:
componentWillReceiveProps
:组件接收到新的props之前调用。shouldComponentUpdate
:组件接收到新的props或state之前调用,用于判断是否需要更新组件。返回true
表示继续执行更新流程,返回false
表示跳过更新流程,直接执行componentDidUpdate
。componentWillUpdate
:组件即将更新之前调用,此时不能修改组件的state或props。render
:重新创建虚拟DOM。componentDidUpdate
:组件更新后立即调用,此时可以访问更新后的DOM元素。
四、样式设置
在React中设置组件样式的语法有多种方式:
- 内联样式:使用内联样式对象来设置样式,样式对象是一个JavaScript对象,其中的属性名是CSS属性,属性值是对应的样式值。
- CSS模块化:通过将CSS文件与组件文件关联起来,可以实现样式的模块化和隔离。在组件中引入CSS模块化文件后,可以使用对应的类名来设置样式。
- CSS-in-JS库:使用如styled-components、emotion等CSS-in-JS库来在React组件中设置样式。这些库允许在组件定义的同时定义样式,并将样式与组件紧密关联在一起。
总之,React的语法涵盖了JSX、组件、状态管理、属性传递、事件处理、组件生命周期以及样式设置等多个方面。掌握这些语法是构建高效、可维护的React应用的基础。
自定义组件
在 React 中创建自定义组件是一个非常常见的任务,它允许你封装和重用代码,从而使你的应用程序更具模块化和可维护性。以下是如何创建和使用自定义组件的基本步骤:
1. 创建函数组件
你可以使用函数来定义简单的无状态组件(也称为函数组件)。
// MyComponent.js
import React from 'react';const MyComponent = (props) => {return (<div><h1>Hello, {props.name}!</h1><p>This is a custom component.</p></div>);
};export default MyComponent;
2. 使用类组件
对于需要管理状态和生命周期方法的组件,你可以使用类组件。
// MyComponent.js
import React, { Component } from 'react';class MyComponent extends Component {state = {count: 0};incrementCount = () => {this.setState({ count: this.state.count + 1 });};render() {return (<div><h1>Hello, {this.props.name}!</h1><p>Count: {this.state.count}</p><button onClick={this.incrementCount}>Increment</button></div>);}
}export default MyComponent;
3. 使用自定义组件
一旦你定义了你的组件,你就可以在其他组件中导入并使用它。
// App.js
import React from 'react';
import MyComponent from './MyComponent';function App() {return (<div className="App"><MyComponent name="React User" /></div>);
}export default App;
4. 传递 Props
在上面的例子中,我们已经展示了如何通过 props
向组件传递数据。你还可以传递更复杂的数据结构,如对象、数组等。
// App.js
import React from 'react';
import MyComponent from './MyComponent';const user = {name: 'React Developer',age: 28,location: 'San Francisco'
};function App() {return (<div className="App"><MyComponent {...user} /></div>);
}// 在 MyComponent.js 中修改
const MyComponent = (props) => {return (<div><h1>Hello, {props.name}!</h1><p>Age: {props.age}</p><p>Location: {props.location}</p><p>This is a custom component.</p></div>);
};
5. 使用 CSS 样式
你可以通过内联样式、CSS 类或 CSS-in-JS 解决方案(如 styled-components)为组件添加样式。
使用内联样式
const MyComponent = (props) => {const style = {color: 'blue',fontSize: '20px'};return (<div style={style}><h1>Hello, {props.name}!</h1><p>This is a custom component.</p></div>);
};
使用 CSS 类
首先,在 CSS 文件中定义样式:
/* MyComponent.css */
.my-component {color: blue;font-size: 20px;
}
然后在组件中导入并使用这些样式:
// MyComponent.js
import React from 'react';
import './MyComponent.css';const MyComponent = (props) => {return (<div className="my-component"><h1>Hello, {props.name}!</h1><p>This is a custom component.</p></div>);
};
6. 高阶组件(HOC)
高阶组件(Higher-Order Components,HOC)是一个函数,它接受一个组件并返回一个新的组件。这通常用于复用组件逻辑。
// withLogger.js
import React from 'react';const withLogger = (WrappedComponent) => {return (props) => {console.log('Rendering:', WrappedComponent.name);return <WrappedComponent {...props} />;};
};// 使用 HOC
// MyComponent.js
import React from 'react';
import withLogger from './withLogger';const MyComponent = (props) => {return (<div><h1>Hello, {props.name}!</h1><p>This is a custom component.</p></div>);
};export default withLogger(MyComponent);
7. 使用 Hooks
Hooks 允许你在函数组件中使用状态和其他 React 特性。
// MyComponent.js
import React, { useState } from 'react';const MyComponent = (props) => {const [count, setCount] = useState(0);return (<div><h1>Hello, {props.name}!</h1><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
};export default MyComponent;
通过这些步骤,你可以创建功能强大且可重用的自定义组件,从而构建复杂的 React 应用程序。
完整例子
以下是一个简单的React应用示例,该应用包含登录功能和一个简单的答题界面。通过这个例子,可以展示React的基本使用,包括组件化开发、状态管理、事件处理等关键概念。
1. 初始化项目
首先,使用React的脚手架工具create-react-app
来初始化一个新的React项目。在命令行中运行以下命令:
npx create-react-app my-react-app
cd my-react-app
npm start
这将创建一个名为my-react-app
的新项目,并启动开发服务器。
2. 创建组件
在src
目录下,创建一个新的组件文件夹components
,并在其中创建两个组件文件:Login.js
和Quiz.js
。
Login.js
import React, { useState } from 'react';
import './Login.css'; // 引入CSS样式文件const Login = () => {const [username, setUsername] = useState('');const [message, setMessage] = useState('');const [isLoggedIn, setIsLoggedIn] = useState(false);const handleChange = (e) => {setUsername(e.target.value);};const handleLogin = () => {if (username.length < 6 || username.length > 18) {setMessage('用户名长度为6-18位');} else {setMessage('');setIsLoggedIn(true);}};return (<div className="login-container"><h2>登录</h2><input type="text" placeholder="请输入用户名" value={username} onChange={handleChange} /><button onClick={handleLogin}>登录</button><p>{message}</p>{isLoggedIn && <Quiz />}</div>);
};export default Login;
Quiz.js
import React, { useState } from 'react';
import './Quiz.css'; // 引入CSS样式文件const questions = [{title: 'br标签是干什么的?',options: ['实现换行的', '显示图片的', '制作按钮的', '实现分段的'],answer: 0,},// 其他问题...
];const Quiz = () => {const [currentQuestion, setCurrentQuestion] = useState(0);const [selectedAnswer, setSelectedAnswer] = useState(null);const handleAnswerChange = (index) => {setSelectedAnswer(index);};const handleNextQuestion = () => {if (selectedAnswer !== null) {setCurrentQuestion((prev) => (prev + 1) % questions.length);setSelectedAnswer(null);}};return (<div className="quiz-container"><h2>{questions[currentQuestion].title}</h2><ul>{questions[currentQuestion].options.map((option, index) => (<li key={index}><inputtype="radio"id={`option-${index}`}name="answer"value={index}checked={selectedAnswer === index}onChange={() => handleAnswerChange(index)}/><label htmlFor={`option-${index}`}>{option}</label></li>))}</ul><button onClick={handleNextQuestion}>下一题</button></div>);
};export default Quiz;
3. 应用样式
在src
目录下创建Login.css
和Quiz.css
文件,为登录和答题界面添加样式。
Login.css
.login-container {width: 300px;margin: 0 auto;text-align: center;
}/* 其他样式... */
Quiz.css
.quiz-container {width: 500px;margin: 0 auto;text-align: left;
}/* 其他样式... */
4. 修改App.js
在src/App.js
文件中,引入Login
组件,并将其渲染到页面上。
import React from 'react';
import Login from './components/Login';
import './App.css';function App() {return (<div className="App"><Login /></div>);
}export default App;
5. 运行应用
确保开发服务器正在运行(使用npm start
启动),然后在浏览器中打开http://localhost:3000
,你将看到一个简单的登录界面。输入用户名并登录后,将显示答题界面。
总结
这个简单的React应用示例展示了如何使用React的组件化开发、状态管理和事件处理等功能来构建用户界面。通过创建Login
和Quiz
组件,并将它们组合在一起,我们可以轻松地实现一个具有登录功能和简单答题界面的Web应用。
相关文章:
【前端知识】React简单入门
React语法介绍 概述一、产生背景与发展历程二、主要特点三、技术细节四、应用场景与优势五、学习与实践 JSX语法一、JSX的基本概念二、JSX的基本使用三、JSX中的JavaScript表达式四、JSX的条件渲染五、JSX的列表渲染六、JSX的样式处理七、JSX的其他注意事项 基础语法一、基础概…...
高通---Camera调试流程及常见问题分析
文章目录 一、概述二、Camera配置的整体流程三、Camera的代码架构图四、Camera数据流的传递五、camera debug FAQ 一、概述 在调试camera过程中,经常会遇到各种状况,本篇文章对camera调试的流程进行梳理。对常见问题的提供一些解题思路。 二、Camera配…...
电压电流声音信号采集与分析系统
基于Labview的电压电流与声音信号采集与分析系统可以同时采集:电压、电流与振动信号。该系统部件可以采集传感器的真实数据,而且可以对采集的信号进行时域与频域分析,并可以实时显示历史数据,保存历史数据。具体的功能如下&#x…...
MongoDB语法及MongoTemplate用法
文章目录 概念操作数据库语法数据库及文档操作文档操作 整合springboot的MongoTemplate用法springboot配置插入删除更新查询 概念 1.MongoDB 是一个文档数据库,数据以 BSON 方式存储(类似于json) 2.文档(Document)&am…...
【git reset】本地下载特定历史提交哈希值的github文件【未联网服务器】进行git reset操作
本地电脑下载git文件,并进行git reset操作 问题描述:解决方法:方法1:直接下载特定版本的github压缩包。方法二: 在本地windows电脑上安装git工具进行git reset版本回退,之后上传相应版本的压缩包到服务器上…...
【开源安全保护】如何安装JumpServer堡垒机
【开源安全保护】如何安装JumpServer堡垒机 什么是堡垒机 大家好,我是星哥,今天我以前来认识堡垒机 堡垒机(Bastion Host),也称为跳板机(Jump Server),是指在计算机网络中&#x…...
log4j漏洞复现--vulhub靶场
声明:学习过程参考了同站的B1g0rang大佬的文章 Web网络安全-----Log4j高危漏洞原理及修复(B1g0rang) CVE-2021-44228 RCE漏洞 Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输…...
K8s面试系列:K8s常用 API 资源总结速记
写在前面 博文内容为 K8s 中常用的API 资源简单总结适合对K8s 有基本认知,温习,面试准备的小伙伴内容涉及:API 资源组成 ,SSA 和 CSA 资源操作方式,以及下面资源类别简单描述 工作负载:Deployments,StatefulSets,HorizontalPodAutoscaler (HPA)…服务: Service,Ingress,E…...
汽车免拆案例 | 2007款宝马650i车发动机偶尔无法起动
故障现象 一辆2007款宝马650i车,搭载N62B48B发动机,累计行驶里程约为26万km。车主反映,发动机偶尔无法起动,故障频率较低,十几天出现1 次,且故障出现时起动机不工作。 故障诊断 接车后试车,…...
前端(三)html标签(2)
html标签(2) 文章目录 html标签(2)一、列表标签二、表格三、form表单 一、列表标签 html中的列表分为无序列表、有序列表和自定义列表。 <!--无序列表的使用--> <!--pycharm中可以用ul>li*3tab的快捷键快速生成无序列表--> <ul><li>秒杀</li&g…...
D91【python 接口自动化学习】- pytest基础用法
day91 pytest的setup,setdown详解(三) 学习日期:20241207 学习目标:pytest基础用法 -- pytest的setup,setdown详解(三) 学习笔记: setup、teardown详解(三…...
云桌面:云计算桌面
目录 云桌面的定义和核心概念 技术架构详解 主流架构详解 管理成本分析 安全性措施 应用场景详解 云桌面的定义和核心概念 云桌面是一种通过云计算技术提供的虚拟桌面服务,它允许用户通过网络访问远程服务器上的虚拟机,这些虚拟机为用户提供了一个…...
Word处理表格的一些宏
目录 1、表格首行居中2、表格内容靠左上下居中(排除首行) 1、表格首行居中 说明: 遇到错误将进行捕获,然后继续处理下一个表格 宏: Sub 表格首行居中()Dim tbl As tableOn Error Resume Next 错误时继续执行下一个…...
Linux网络编程---本地套接字
1.概述 本地套接字 1:作用:本地的进程间通信 2.有关系的进程间通信 3.没有关系的进程间的通信 本地套结字实现流程和网络套结字实现相似,一般采用tcp 二.通信流程 本地套结字通信的流程:1.服务器端:1.1 int fd socket(AF_UNIX/AF_LOCAL,…...
C#自动验证发票真假的程序
C#自动验证发票真假的程序 using Microsoft.Azure.CognitiveServices.Vision.ComputerVision; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models; using System; using System.IO; using System.Threading.Tasks;namespace InvoiceValidation {class Pr…...
后端技术进阶知识总结
前端开发、后端开发、AI算法与应用等技术进阶知识总结 前言1.前端开发2.后端开发3.AI算法3.1 Studio级别的AI工具使用 前言 本文不记录基础性问题和详细解决方案。只记录key idea。 1.前端开发 2.后端开发 依赖注入(Dependency Injection,简称DI&…...
opencv复习
目录 1.core 1.图像变换 1.1 affine仿射变换 1.2 透视变换 2.四元数(旋转) 2.1 轴角转四元数 2.2 旋转矩阵转四元数 2.3 欧拉角转旋转矩阵 2.4 四元数转旋转矩阵 2.5 四元数用eigen用的比较多 2. imgproc. Image Processing 2.1 bilateralF…...
【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度
本文介绍如何在编辑器里让物体围绕一个点旋转固定角度,比如上图里的Cube是围绕白色圆盘的中心旋转45度的。 目标: 创建一个在 Unity 编辑器中使用的旋转工具,使开发者能够在编辑模式下快速旋转一个物体。 实现思路: 编辑模式下…...
通过IP远程连接MySQL服务时不允许连接到这个MySQL服务器
当你在连接Mysql时报这个错误时 is not allowed to connect to this MySQL server,意思是 MySQL 服务器不允许来自 IP 地址的连接。这通常是由于 MySQL 服务器的访问控制列表(ACL)限制了特定主机的连接。 要解决这个问题,你需要授…...
试题转excel;pdf转excel;试卷转Excel,word试题转excel
一、问题描述 一名教师朋友,偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运,几百道题几乎需要一个下午的时间 关键这些事,枯燥无聊费眼睛,实在是看起来就很蠢的工作 就想着做一个工具,可以自动处理…...
wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库
wordpress网站使用Linux宝塔面板添加mysql数据库,使用phpMyAdmin工具导入sql数据库文件,会有最大限制50M。即使把sql数据库文件压缩为gzip或zip压缩包,压缩包也超过50M,该怎么办?怎样导入超过50M数据库呢? …...
VCP-CLIP A visual context prompting modelfor zero-shot anomaly segmentation
GitHub - xiaozhen228/VCP-CLIP: (ECCV 2024) VCP-CLIP: A visual context prompting model for zero-shot anomaly segmentation 需要构建正样本,异常样本,以及对应的Mask...
【原生js案例】webApp实现鼠标移入移出相册放大缩小动画
图片相册这种动画效果也很常见,在我们的网站上。鼠标滑入放大图片,滑出就恢复原来的大小。现在我们使用运动定时器来实现这种滑动效果。 感兴趣的可以关注下我的系列课程【webApp之h5端实战】,里面有大量的css3动画效果制作原生知识分析&…...
杂谈随笔-关于unity开发游戏
最近有在做unity的游戏开发,都是自学,甚至没有完整的课程体系…… 在犹豫要不要出系列教程,帮助新手快速入门的同时算是巩固一下基础知识。 那这篇文章先谈谈我对于引擎开发游戏的一些小观点,算是做了这么十几个星期的微不足道的…...
base64转file文件对象
1.base64转file文件对象 //将base64转换为文件 dataURLtoFile(dataurl, filename) { var arr dataurl.split(,),mime arr[0].match(/:(.*?);/)[1],bstr atob(arr[1]),n bstr.length,u8arr new Uint8Array(n);while (n--) {u8arr[n] bstr.charCodeAt(n);}return new Fil…...
【jvm】为什么要有GC
目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存,这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理,降低了内存泄漏和内存溢出等问…...
开发指南085-大号版elementUI
ElementUI有些地方显示实在太小,不方便操作,需要放大: 1、el-dialog的标题栏那个关闭符号 使用如下方法放大 ::v-deep .el-dialog__headerbtn { font-size: 40px; font-weight: 700; top: 0px; } 2、el-table-column 设置sor…...
#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(下)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
使用WebStorm开发Vue3项目
记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦!?? 基本配置 打包工具:Vite 前端框架:ElementPlus 开发语言:Vue3、TypeScript、Sass 代码检查:ESLint、Prettier IDE:WebSt…...
Mac 录制电脑系统内的声音的具体方法?
1.第一步:下载BlackHole 软件 方式1:BlackHole官方下载地址 方式2: 百度云下载 提取码: n5dp 2.第二步:安装BlackHole 双击下载好的BlackHole安装包,安装默认提示安装。 3.第三步:在应用程序中找到音频…...
计算机网络
1.网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必须遵守一些约定好的规则,比如交换数据地格式,是否需要发送一个应答信息。这些规则被称为网络协议。 分层结构 应用层:为计算机用户提供服务表示层&…...
爬取某市KFC餐厅信息(POST请求+PYMYSQL)
# 简介 本教程将指导您如何使用Python爬取石家庄市的KFC门店信息,并将这些信息存储到MySQL数据库中。我们将使用requests库来发送网络请求,pymysql库来操作MySQL数据库。 环境准备 在开始之前,请确保您已经安装了以下Python库:…...
109.【C语言】数据结构之二叉树层序遍历
目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…...
Java转C之内存管理
从 Java 转向 C 语言开发,内存管理和指针是两个核心且关键的概念。这些概念在 Java 中被抽象和自动化处理,而在 C 语言中则需要开发者手动管理和操作。 目录 内存管理概述指针基础 指针的定义与初始化地址运算符 & 和解引用运算符 *指针运算 动态内…...
共享内存和信号量
一、共享内存原理 1、基础前提 共享内存是为了进程之间通信服务的。进程间的通信的核心是要让两个不同的进程看到同一份资源。之前的匿名管道通过父子进程继承的关系,让父子进程看到同一份资源,进而进行通信;命名管道则是通过唯一的路径让两…...
SED命令
基本用法: sed命令具体应用: 1.删除第2-5行 nl regular_express.txt | sed 2d结果: 2.在第二行之后新增两行,分别为"drink tea…" 和"drink beer?" nl regular_express.txt | sed 2 a\ drink tea...\…...
洛谷 P6368 [COCI2006-2007#6] MAGIJA C语言
题目:https://www.luogu.com.cn/problem/P6368 题目背景 知名魔术师 AlDimi Kartimi 需要你帮助他来设计他扑克牌的背面图案。 题目描述 众所周知,扑克牌的背面是一个矩形,通过做两边的中垂线可以将矩形分成相等的四部分。 AlDimi Karti…...
TDesign:Picker 选择器
Picker 选择器 API文档地址 单列选择器用法 /// view onTap:(){TDPicker.showMultiPicker(context,data: [controller.coinList],title: ,rightTextStyle: TextStyle(color: AppColors.ColorMain),onConfirm: (selected) {controller.onTapCoin(selected);Navigator.of(contex…...
LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略
LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略 导读:这篇博文介绍了 Lares,一个由简单的 AI 代理驱动的智能家居助手模拟器,它展现出令人惊讶的解决问题能力。 >> 背景痛点:每天都有新的…...
实验3-实时数据流处理-Flink
1.前期准备 (1)Flink基础环境安装 参考文章: 利用docker-compose来搭建flink集群-CSDN博客 显示为这样就成功了 (2)把docker,docker-compose,kafka集群安装配置好 参考文章: …...
axios笔记
一、axios是什么 前端最流行的ajax请求库 二、json-server json-server可以帮助我们搭建http服务 为什么要搭建http服务? :是因为我们用axios的时候,需要向服务端发送请求 我们需要服务端这样一个角色,来与axios结合做实践 1.…...
python拆分Excel文件
按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下: 结果:红色是按照Sheet名拆出的,蓝色和橙色是某个Sheet按照某列的不同值拆分的。 代码: # -*- coding: utf-8 -*- """ 拆分excel文件——按照…...
使用IntelliJ IDEA开发Gradle插件并发布到本地
博主所用软件版本为: IntelliJ IDEA 2024.1.4 (Community Edition) Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1 1、制作gradle插件(IntelliJ IDEA 2024.1.4) 新建groovy工程,File–>New–>Project… 右键点…...
C# 通过smtp发送邮件(配置好了参数可以直接用)
可以直接用 using System; using System.Net; using System.Net.Mail;class EmailSender {// 发送邮件的函数,接收SMTP配置作为参数public static void SendEmail(string smtpServer, int smtpPort, string senderEmail, string senderPassword, string subject, s…...
【数据结构】栈和队列
目录 1.栈 1.1.栈的概念及结构 1.2.栈的实现 2.队列 2.1.队列的概念及结构 2.2.队列的实现 3.运用栈理解一道题 4.使用两个队列实现一个栈 1.栈 1.1.栈的概念及结构 首先,我们来了解一种新的数据结构——栈。栈是一种特殊的线性表,其只允许在固…...
使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档
Spring Boot 3 整合 springdoc-openapi 概述 springdoc-openapi 是一个用于自动生成 OpenAPI 3.0 文档的库,它支持与 Spring Boot 无缝集成。通过这个库,你可以轻松地生成和展示 RESTful API 的文档,并且可以使用 Swagger UI 或 ReDoc 进行…...
网络数据库安全和数据安全概述
1、数据安全的三要素 完整性,机密性,可用性 2、安全技术和措施 数据完整性技术、数据备份和恢复技术、数据加密技术、访问控制技术、用户管理和身份验证技术 3、数据库安全 数据库安全是指数据库的任何部分都不允许受到侵害,或未经授权的…...
STM32F10X与GD32工程创建区别
1.宏定义区别 GD32虽然与STM32F10X的管脚兼容,但是用keil创建工程时,GD32在选择芯片型号的时候就已经自己定义了宏。STM32F10x需要手动定义宏。在以下界面定义用到的单片机。 2.时钟区别。GD32最大时钟为120Mhz,所用的hal库里面的系统初始化会初始化时钟…...
cmakelist使用总结
支持能编译成在不同系统上运行程序的方法 我们代码就一份,但有时需要编译成arm32,有时需要编译成x86_64,或更多 1、首先先将代码定义一个名称: #将所有的源文件列为一个集合,集合名字叫做SRC_LISTS set(SRC_LISTS main.cpp A.cpp…...
【论文阅读】国际开源发展经验及其对我国开源创新体系建设的启示
作者:包云岗老师 包云岗老师是计算机体系结构方向的大牛,推动了体系结构方面的开源事业! 欢迎对本栏目感兴趣的人学习"一生一芯"~ 学习体会: 承接前文,唐志敏老师讲到已有的软硬件生态系统和开发成本制约了对新结构的探…...