React的基本知识:事件监听器、Props和State的区分、改变state的方法、使用回调函数改变state、使用三元运算符改变state

这篇教学文章涵盖了大量的React基本知识。
包括:

  • 事件监听器
  • Props和State的区分
  • 改变state的方法
  • 使用回调函数改变state
  • 使用三元运算符改变state
  • 处理state中的数组
  • 处理state中的object
  • 条件渲染 &&
  • 条件渲染 三元运算符
  • React中的forms

1. Event Listeners

在React中,事件监听器(Event Listeners)是用于响应用户操作(如点击、输入、鼠标移动等)的函数。
React中的事件监听器通常以camelCase形式命名,而不是使用HTML中的小写命名。例如,HTML中的onclick在React中写作onClick。
在React组件中,你可以在JSX中直接添加事件监听器。这些监听器是作为组件的属性添加的,其值是一个函数,当事件触发时,这个函数会被调用。

export default function App(){function handleClick(){console.log("I was clicked!")}function handleOnMouseOver (){console.log("MouseOver")}return (<div><img src="https://picsum.photos/640/360"onMouseOver={handleOnMouseOver}/><button onClick={handleClick}>Click me</button></div>)
}

2. Props vs. State

“Props” refers to the properties being passed into a component in order for it to work correctly, similar to how a function receives parameters. A component receiving props is not allowed to modify those props. (i.e. they are “immutable”)

“State” refers to values that are managed by the component, similar to variables declared inside a function. Anytime you have changing values that should be saved/displayed, you will likely be using state.

在React中,组件的数据管理主要通过两种属性来实现:props(属性)和state(状态)。理解它们之间的区别对于构建有效的React应用至关重要。
Props(属性)

  • 不可变性:Props是从父组件传递到子组件的数据,它们是不可变的。这意味着一旦props被传递给组件,组件就不能直接修改这些props的值。如果需要改变props的值,必须通过父组件来完成。
  • 单向数据流:Props支持React的单向数据流原则,即数据只能从父组件流向子组件,这有助于避免数据流的混乱和应用状态的不可预测性。

State(状态)

  • 可变性:State是组件内部管理的数据,它可以在组件的生命周期内被改变。State的变化会触发组件的重新渲染。
  • 组件内部管理:State是私有的,只能在声明它的组件内部被直接访问和修改。State的变化通常是由于用户交互或程序逻辑的需要。
  • 触发渲染:当组件的state发生变化时,React会重新渲染组件,以确保UI与最新的状态保持同步。

3. Changing State

在React中,“changing state”(改变状态)是指更新组件内部的状态(state)。状态是React组件的私有数据,它可以帮助组件记录和响应用户操作或其他事件。当状态发生变化时,React会重新渲染组件,以确保UI与最新的状态保持同步。

改变状态的方法
在类组件中,状态通过this.setState()方法更新,在函数组件中,状态通过useState钩子(hook)的设置函数(setter function)更新。

类组件中改变状态
在类组件中,状态是使用this.state来声明的,而this.setState()方法用来更新状态。

函数组件中改变状态
在函数组件中,useState钩子允许你添加状态到函数组件中。useState返回一个数组,其中包含当前状态值和一个可以更新该状态的函数。


import React from "react"export default function App(){const [isImportant, setIsImportant] = React.useState("YES")function handleClick(){setIsImportant("NO")}return (<div><h1>Is state important to know?</h1><div onClick={handleClick}><h1>{isImportant}</h1></div></div>)}

4. Changing state with a callback function

在React中,使用回调函数(callback function)来改变状态是一种常见的做法,尤其是在你需要基于当前状态来更新状态时。这种模式允许你在状态更新时立即获取最新的状态值,这对于执行依赖于前一个状态的计算特别有用。


import React from "react"export default function App(){const [count, setCount] = React.useState(0)function add(){setCount(prevCount => prevCount+1)}function subtract(){setCount(prevCount => prevCount-1)}return (<div><button onClick={subtract}>-</button><div><h1>{count}</h1></div><button onClick={add}>+</button></div>)}

5. Changing state: ternary

在React中,使用三元运算符(ternary operator)来改变状态是一种简洁的方式来根据条件选择新的状态值。三元运算符是一种表达式,它有三个操作数:一个条件、一个真值和一个假值。如果条件为真,则返回真值;如果条件为假,则返回假值。

import React from "react"export default function App(){const [isGoingOut, setIsGoingOut] = React.useState(true)function changeMind(){setIsGoingOut(prevState => !prevState)}return (<div><h1>Do I feel like going out tonight?</h1><div onClick={changeMind}><h1>{isGoingOut ? "Yes" : "No"}</h1></div></div>)
}

6. Complex State: arrays

在React中处理复杂状态,尤其是涉及到数组时,我们需要特别小心,因为数组是引用类型直接修改数组不会触发组件的重新渲染。以下是一些关于如何在React中处理复杂状态,特别是数组的要点:

  1. 不要直接修改状态
    直接修改数组(如通过索引赋值或使用push、pop等方法)不会触发组件的重新渲染。这是因为React使用浅比较来检测状态的变化。因此,任何对数组的修改都应该通过创建一个新数组来完成,以确保状态的变化能够被React检测到。
  2. 使用函数式更新
    在函数组件中,当需要基于当前状态来更新数组时,应该使用函数式更新。这意味着传递一个函数给setState(或在useState中的设置函数),这个函数接收当前状态作为参数,并返回新的状态。
import React from "react"export default function App(){const [thingsArray, setThingsArray] = React.useState(["Thing 1", "Thing 2"])function addItem(){setThingsArray(prevState => {return [...prevState, `Thing ${prevState.length + 1}`]})}const thingsElements = thingsArray.map(thing => <p key={thing}>{thing}</p>)return (<div><button onClick={addItem}>Add Item</button>{thingsElements}</div>)}

在这个例子中,我们通过扩展运算符…来创建一个新数组,包含旧数组的所有元素以及新添加的元素,这样可以确保状态的变化。

7. Complex state: objects

在React中处理复杂状态,尤其是涉及到对象时,与处理数组类似,需要特别注意不可变性(immutability)。这是因为React依赖于比较状态的新旧值来决定是否重新渲染组件。如果直接修改对象,React可能无法检测到状态的变化,从而不会触发组件的重新渲染。

  1. 不要直接修改状态
    直接修改对象(如添加、删除或修改对象的属性)不会触发组件的重新渲染。因此,任何对对象状态的修改都应该通过创建一个新对象来完成。
  2. 使用函数式更新
    在函数组件中,当需要基于当前状态来更新对象时,应该使用函数式更新。这意味着传递一个函数给setState(或在useState中的设置函数),这个函数接收当前状态作为参数,并返回新的状态。
import React from "react"export default function App(){const [contact, setContact] = React.useState({firstName: "John",lastName: "Doe",phone: "+1 (719) 555-1212",email: "itsmyrealname@example.com",isFavorite: true})let starIcon = contact.isFavorite ? "star-filled.png" : "star-empty.png"function toggleFavorite(){console.log("Toggle Favorite")}return (<main><article><img src="images/user.png" /><div><imgsrc={`images/${starIcon}`}onClick={toggleFavorite}/><h2>{contact.firstName} {contact.lastName}</h2><p>{contact.phone}</p><p>{contact.email}</p></div></article></main>)}

在这里插入图片描述
star-empty.png
在这里插入图片描述
star-filled.png
在这里插入图片描述
user.png

8. Complex state: updating state object

在这个例子中,我们通过扩展运算符…来创建一个新对象,包含旧对象的所有属性以及新修改的属性,这样可以确保状态的变化能够被React检测到。

import React from "react"export default function App(){const [contact, setContact] = React.useState({firstName: "John",lastName: "Doe",phone: "+1 (719) 555-1212",email: "itsmyrealname@example.com",isFavorite: true})let starIcon = contact.isFavorite ? "star-filled.png" : "star-empty.png"function toggleFavorite(){setContact(prevContact => ({...prevContact,isFavorite: !prevContact.isFavorite}))}return (<main><article><img src="images/user.png" /><div><imgsrc={`images/${starIcon}`}onClick={toggleFavorite}/><h2>{contact.firstName} {contact.lastName}</h2><p>{contact.phone}</p><p>{contact.email}</p></div></article></main>)}

9. Flip the box

App.jsx

import React from "react"
import boxes from "../public/components/boxes";
import Box from "../public/components/Box";export default function App(){const [squares, setSquares] = React.useState(boxes)const squareElements = squares.map(square => (<Box key={square.id} on={square.on} />))return (<main>{squareElements}</main>)}

boxes.jsx

export default [{id: 1,on: true},   {id: 2,on: false},   {id: 3,on: true},   {id: 4,on: true},   {id: 5,on: false},   {id: 6,on: false},   
]

Box.jsx

import React from "react"export default function Box(props) {const [on, setOn] = React.useState(props.on)const styles = {backgroundColor: on ? "#222222" : "transparent"}function toggle(){setOn(prevOn => !prevOn)}return (<div style={styles} className="box"onClick={toggle}    ></div>)
}

index.css

* {box-sizing: border-box;
}body {font-family: "Karla", sans-serif;margin: 0;
}.box {height: 100px;width: 100px;border: 1px solid black;display: inline-block;margin-right: 4px;border-radius: 5px;
}

10. Flip the box (use ternary operator)

App.jsx

import React from "react"
import boxes from "../public/components/boxes";
import Box from "../public/components/Box";export default function App(){const [squares, setSquares] = React.useState(boxes)function toggle(id) {setSquares(prevSquares => {return prevSquares.map((square) => {return square.id === id ? {...square, on: !square.on} : square})})}const squareElements = squares.map(square => (<Box key={square.id}on={square.on}toggle={() => toggle(square.id)} />))return (<main>{squareElements}</main>)}

Box.jsx

import React from "react"export default function Box(props) {const styles = {backgroundColor: props.on ? "#222222" : "transparent"}return (<div style={styles} className="box"onClick={props.toggle}    ></div>)
}

11. Conditional rendering: &&

在React中,条件渲染是指根据某些条件来决定是否渲染某些组件或元素。这可以通过多种方式实现,包括使用JavaScript的逻辑与(&&)操作符。逻辑与操作符&&在条件渲染中非常有用,因为它允许你在同一个表达式中进行条件检查和元素渲染。
使用&&进行条件渲染
当你使用&&操作符时,如果其左边的表达式为真(truthy),则整个表达式的结果将取决于右边的表达式。在JSX中,这可以用来直接根据条件渲染元素。


import React from "react"
import boxes from "../public/components/boxes";
import Box from "../public/components/Box";export default function App(){const [messages, setMessages] = React.useState(["a", "b", "c"])return (<div>{messages.length > 0 &&<h1>You have {messages.length} unread messages!</h1>}</div>)}

12. Conditional rendering: ternary

在React中,条件渲染是指根据条件来决定是否渲染某些组件或元素。三元运算符(ternary operator)是一种常用的JavaScript表达式,用于基于条件进行快速的“if-else”判断,它在React的条件渲染中也非常有用。

condition ? expressionIfTrue : expressionIfFalse;
  • condition:一个布尔表达式,其结果为true或false。
  • expressionIfTrue:如果condition为true,则返回这个表达式的值。
  • expressionIfFalse:如果condition为false,则返回这个表达式的值。

你可以在JSX中直接使用三元运算符来决定渲染哪个元素或组件。

import React from "react"
import boxes from "../public/components/boxes";
import Box from "../public/components/Box";export default function App(){const [messages, setMessages] = React.useState(["a"])return (<div>{messages.length === 0 ?<h1>You're all caught up!</h1> :<h1>You have {messages.length} unread {messages.length > 1 ? "messages" : "message"}</h1>}</div>)}

13. Conditional rendering

  1. What is “conditional rendering”?
    When we want to only sometimes display something on the page
    based on a condition of some sort

  2. When would you use &&?
    When you want to either display something or NOT display it

  3. When would you use a ternary?
    When you need to decide which thing among 2 options to display

  4. What if you need to decide between > 2 options on
    what to display?
    Use an if...else if... else conditional or a switch statement

14. Watch for input changes in React

在React中,监视输入变化是一个常见的需求,尤其是在处理表单时。这可以通过几种方式实现,包括使用状态(state)和效果(effects)。
使用State和Effects监视输入变化
在React中,你可以通过维护一个状态来监视输入的变化。当输入变化时,更新这个状态,从而触发组件的重新渲染。


import React from "react"export default function App(){const [firstName, setFirstName] = React.useState("")console.log(firstName)function handleChange(event){setFirstName(event.target.value)}return (<form><inputtype="text"placeholder="First Name"onChange={handleChange}/></form>)}

在这个例子中,每次用户输入时,handleChange函数都会被调用,并更新firstName状态,这会导致组件重新渲染并显示最新的输入值。

15. Form state object


import React from "react"export default function App(){const [formData, setFormData] = React.useState({firstName: "", lastName: "", email: ""})console.log(formData)function handleChange(event){setFormData(prevFormData => {return {...prevFormData,[event.target.name]: event.target.value}})}return (<form><inputtype="text"placeholder="First Name"onChange={handleChange}name="firstName"/><inputtype="text"placeholder="Last Name"onChange={handleChange}name="lastName"/><inputtype="email"placeholder="Email"onChange={handleChange}name="email"/></form>)}

16. Forms in React: textarea


import React from "react"export default function App(){const [formData, setFormData] = React.useState({firstName: "", lastName: "", email: "", comments: ""})console.log(formData.comments)function handleChange(event){setFormData(prevFormData => {return {...prevFormData,[event.target.name]: event.target.value}})}return (<form><inputtype="text"placeholder="First Name"onChange={handleChange}name="firstName"value={formData.firstName}/><inputtype="text"placeholder="Last Name"onChange={handleChange}name="lastName"value={formData.lastName}/><inputtype="email"placeholder="Email"onChange={handleChange}name="email"value={formData.email}/><textareavalue={formData.comments}placeholder="Comments"onChange={handleChange}name="comments"/></form>)}

17. Forms in React: checkbox


import React from "react"export default function App(){const [formData, setFormData] = React.useState({firstName: "", lastName: "", email: "", comments: "",isFriendly: true})function handleChange(event){const {name, value, type, checked} = event.targetsetFormData(prevFormData => {return {...prevFormData,[name]: type === "checkbox" ? checked : value}})}return (<form><inputtype="text"placeholder="First Name"onChange={handleChange}name="firstName"value={formData.firstName}/><inputtype="text"placeholder="Last Name"onChange={handleChange}name="lastName"value={formData.lastName}/><inputtype="email"placeholder="Email"onChange={handleChange}name="email"value={formData.email}/><textareavalue={formData.comments}placeholder="Comments"onChange={handleChange}name="comments"/><inputtype="checkbox"id="isFriendly"checked={formData.isFriendly}onChange={handleChange}name="isFriendly"/><label htmlFor="isFriendly">Are you friendly?</label><br /></form>)}

18. Forms in React: radio buttons


import React from "react"export default function App(){const [formData, setFormData] = React.useState({firstName: "", lastName: "", email: "", comments: "",isFriendly: true,employment: ""})console.log(formData.employment)function handleChange(event){const {name, value, type, checked} = event.targetsetFormData(prevFormData => {return {...prevFormData,[name]: type === "checkbox" ? checked : value}})}return (<form><inputtype="text"placeholder="First Name"onChange={handleChange}name="firstName"value={formData.firstName}/><inputtype="text"placeholder="Last Name"onChange={handleChange}name="lastName"value={formData.lastName}/><inputtype="email"placeholder="Email"onChange={handleChange}name="email"value={formData.email}/><textareavalue={formData.comments}placeholder="Comments"onChange={handleChange}name="comments"/><inputtype="checkbox"id="isFriendly"checked={formData.isFriendly}onChange={handleChange}name="isFriendly"/><label htmlFor="isFriendly">Are you friendly?</label><br /><br /><fieldset><legend>Current employment status</legend><input type="radio"id="unemployed"name="employment"value="unemployed"checked={formData.employment === "unemployed"}onChange={handleChange}/><label htmlFor="unemployed">Unemployed</label><br /><input type="radio"id="part-time"name="employment"value="part-time"checked={formData.employment === "part-time"}onChange={handleChange}/><label htmlFor="part-time">Part-time</label><br /><input type="radio"id="full-time"name="employment"value="full-time"checked={formData.employment === "full-time"}onChange={handleChange}/><label htmlFor="full-time">Full-time</label><br /></fieldset></form>)}

19. Forms in React: Select and options


import React from "react"export default function App(){const [formData, setFormData] = React.useState({firstName: "", lastName: "", email: "", comments: "",isFriendly: true,employment: "",favColor: ""})console.log(formData.favColor)function handleChange(event){const {name, value, type, checked} = event.targetsetFormData(prevFormData => {return {...prevFormData,[name]: type === "checkbox" ? checked : value}})}return (<form><inputtype="text"placeholder="First Name"onChange={handleChange}name="firstName"value={formData.firstName}/><inputtype="text"placeholder="Last Name"onChange={handleChange}name="lastName"value={formData.lastName}/><inputtype="email"placeholder="Email"onChange={handleChange}name="email"value={formData.email}/><textareavalue={formData.comments}placeholder="Comments"onChange={handleChange}name="comments"/><inputtype="checkbox"id="isFriendly"checked={formData.isFriendly}onChange={handleChange}name="isFriendly"/><label htmlFor="isFriendly">Are you friendly?</label><br /><br /><fieldset><legend>Current employment status</legend><input type="radio"id="unemployed"name="employment"value="unemployed"checked={formData.employment === "unemployed"}onChange={handleChange}/><label htmlFor="unemployed">Unemployed</label><br /><input type="radio"id="part-time"name="employment"value="part-time"checked={formData.employment === "part-time"}onChange={handleChange}/><label htmlFor="part-time">Part-time</label><br /><input type="radio"id="full-time"name="employment"value="full-time"checked={formData.employment === "full-time"}onChange={handleChange}/><label htmlFor="full-time">Full-time</label><br /></fieldset><label htmlFor="favColor">What is your favorite color?</label><br /><select id="favColor"value={formData.favColor}onChange={handleChange}name="favColor"><option value="">-- Choose --</option><option value="red">Red</option><option value="orange">Orange</option><option value="yellow">Yellow</option><option value="green">Green</option><option value="blue">Blue</option><option value="indigo">Indigo</option><option value="violet">Violet</option></select></form>)}

20. Forms in React: Submitting the form


import React from "react"export default function App(){const [formData, setFormData] = React.useState({firstName: "", lastName: "", email: "", comments: "",isFriendly: true,employment: "",favColor: ""})function handleChange(event){const {name, value, type, checked} = event.targetsetFormData(prevFormData => {return {...prevFormData,[name]: type === "checkbox" ? checked : value}})}function handleSubmit(event) {event.preventDefault()console.log(formData)}return (<form onSubmit={handleSubmit}><inputtype="text"placeholder="First Name"onChange={handleChange}name="firstName"value={formData.firstName}/><inputtype="text"placeholder="Last Name"onChange={handleChange}name="lastName"value={formData.lastName}/><inputtype="email"placeholder="Email"onChange={handleChange}name="email"value={formData.email}/><textareavalue={formData.comments}placeholder="Comments"onChange={handleChange}name="comments"/><inputtype="checkbox"id="isFriendly"checked={formData.isFriendly}onChange={handleChange}name="isFriendly"/><label htmlFor="isFriendly">Are you friendly?</label><br /><br /><fieldset><legend>Current employment status</legend><input type="radio"id="unemployed"name="employment"value="unemployed"checked={formData.employment === "unemployed"}onChange={handleChange}/><label htmlFor="unemployed">Unemployed</label><br /><input type="radio"id="part-time"name="employment"value="part-time"checked={formData.employment === "part-time"}onChange={handleChange}/><label htmlFor="part-time">Part-time</label><br /><input type="radio"id="full-time"name="employment"value="full-time"checked={formData.employment === "full-time"}onChange={handleChange}/><label htmlFor="full-time">Full-time</label><br /></fieldset><label htmlFor="favColor">What is your favorite color?</label><br /><select id="favColor"value={formData.favColor}onChange={handleChange}name="favColor"><option value="">-- Choose --</option><option value="red">Red</option><option value="orange">Orange</option><option value="yellow">Yellow</option><option value="green">Green</option><option value="blue">Blue</option><option value="indigo">Indigo</option><option value="violet">Violet</option></select><br /><br /><button>Submit</button></form>)}

21. Sign up form practice


import React from "react"export default function App(){const [formData, setFormData] = React.useState({email: "",password: "",passwordConfirm: "",joinedNewsletter: true})function handleChange(event){const {name, value, type, checked} = event.targetsetFormData(prevFormData => ({...prevFormData,[name]: type === "checkbox" ? checked : value}))}function handleSubmit(event){event.preventDefault()if (formData.password === formData.passwordConfirm){console.log("Successfully signed up")} else {console.log("Passwords do not match")return}if(formData.joinedNewsletter){console.log("Thanks for signing up for our newsletter!")}}return (<div><form onSubmit={handleSubmit}><input type="email"placeholder="Email address"name="email"onChange={handleChange}value={formData.email}/><input type="password"placeholder="Password"name="password"onChange={handleChange}value={formData.password}/><input type="password"placeholder="Confirm password"name="passwordConfirm"onChange={handleChange}value={formData.passwordConfirm}/><div><input id="okayToEmail"type="checkbox"name="joinedNewsletter"onChange={handleChange}checked={formData.joinedNewsletter}/><label htmlFor="okayToEmail">I want to join the newsletter</label></div><button>Sign up</button></form></div>)}

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

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

相关文章

repmgr安装及常用运维指令

简介 repmgr 由 EDB 与其他个人和组织的贡献一起开发&#xff0c;安装部署相对较为简单 安装 repmgr官网上传对应的安装到服务器上 安装前/etc/hosts IP映射、始终同步、免密通信本文忽略 repmgr的安装相对较为简单,目前repmgr-5仅仅支持到postgresql-15 postgresql必要参数…

opencv-python 分离边缘粘连的物体(距离变换)

import cv2 import numpy as np# 读取图像&#xff0c;这里添加了判断图像是否读取成功的逻辑 img cv2.imread("./640.png") # 灰度图 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 gray cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, binary cv2…

SATA接口不通分析案例分享

问题&#xff1a; 反馈有台NVR的某个接口SATA不通&#xff08;共有4个SATA接口&#xff0c;采用SATA HUB JMB575&#xff09;&#xff0c;挂载硬盘不上。 分析&#xff1a; 1、直接对换问题口SATA1与正常口SATA2的SATA数据线&#xff0c;SATA1口还是异常&#xff0c;挂在不上…

【Web前端】如何构建简单HTML表单?

HTML 表单是 Web 开发中非常重要的组成部分。它们是与用户交互的主要方式&#xff0c;能够收集用户输入的数据。表单的灵活性使它们成为 HTML 中最复杂的结构之一&#xff0c;但若使用正确的结构和元素&#xff0c;可以确保其可用性和无障碍性。 表单的基本结构 HTML 表单使用…

Flutter:AnimatedIcon图标动画,自定义Icon通过延时Interval,实现交错式动画

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// late延迟初始化 AnimationControllerlate AnimationController _controller;overridevoid initStat…

PyQt学习笔记

一.PyQt5的安装 当我们安装好开发环境后&#xff0c;打开pycharm在其设置里面点击按钮自动安装即可。 安装完成后我们会在这里面看到这几个东西说明安装成功了。 二.PyQt5 GUI程序框架 1.一个简单的PyQt5应用程序 首先我们用pycharm创建一个demo.py的文件。 我们创建文件为s…

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&…

ReactPress(阮一峰推荐工具):一款基于Next.js的免费开源博客CMS系统

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 此项目是用于构建博客网站的&#xff0c;包含前台展示、管理后台和后端。 此项目是基于 React antd NestJS NextJS MySQL 的&#xff0c;项目已经开源&#xff0c;项目地址在 …

pytorch自定义算子导出onnx

文章目录 1、为什么要自定义算子&#xff1f;2、如何自定义算子3、自定义算子导出onnx4、example1、重写一个pytorch 自定义算子&#xff08;实现自定义激活函数&#xff09;2、现有算子上封装pytorch 自定义算子&#xff08;实现动态放大超分辨率模型&#xff09; 1、为什么要…

构建高效在线教育:SpringBoot课程管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理在线课程管理系统的相关信息成为必然。开发…

CSS3新特性——字体图标、2D、3D变换、过渡、动画、多列布局

目录 一、Web字体 二、字体图标 三、2D变换 1.位移 &#xff08;1&#xff09;浮动 &#xff08;2&#xff09;相对定位 &#xff08;3)绝对定位和固定定位 &#xff08;4&#xff09;位移 用位移实现盒子的水平垂直居中 2.缩放 利用缩放调整字体到12px以下&#xff…

python Flask指定IP和端口

from flask import Flask, request import uuidimport json import osapp Flask(__name__)app.route(/) def hello_world():return Hello, World!if __name__ __main__:app.run(host0.0.0.0, port5000)

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大&#xff0c;用起来也…

C++(进阶) 第1章 继承

C&#xff08;进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的&#xff08;3种继承方式&#xff09;继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…

Load-Balanced-Online-OJ(负载均衡式在线OJ)

负载均衡式在线OJ 前言1. 项目介绍2. 所用技术与环境所用技术栈开发环境 3. 项目宏观结构3.1 项目核心模块3.2 项目的宏观结构 4. comm公共模块4.1 日志&#xff08;log.hpp &#xff09;4.1.1 日志主要内容4.1.2 日志使用方式4.1.2 日志代码 4.2 工具&#xff08;util.hpp&…

c++->内部类 匿名对象

内部类&#xff1a;&#xff08;例如&#xff1a;b定义在a类中&#xff09; 注意事项&#xff1a; &#xff08;1&#xff09;内部类b可以直接使用外部类的static变量&#xff0c;但是并不属于外部类的友元&#xff01;&#xff01;&#xff01;&#xff01; #include <s…

C++ std::unique_ptr的使用及源码分析

目录 1.简介 2.使用方法 2.1.创建 unique_ptr 2.2.删除对象 2.3.转移所有权 2.4.自定义删除器 2.5.从函数返回 std::unique_ptr 2.6.将 std::unique_ptr 作为函数参数 3.适用场景 4.与原始指针的区别 5.优缺点 6.源码分析 6.1.构造函数 6.2.存储分析 6.3.默认删…

系统思考—关键决策

最近听到一句话特别扎心&#xff1a;“不是环境毁了企业&#xff0c;而是企业误判了环境。” 在大环境变化面前&#xff0c;很多企业的反应是快速调整&#xff0c;但这真的有效吗&#xff1f;其实&#xff0c;太快的动作&#xff0c;往往是误判的开始。 环境变化带来压力&…

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

ES八股相关知识

为什么要使用ElasticSearch&#xff1f;和传统关系数据库&#xff08;如 MySQL&#xff09;有什么不同&#xff1f; 典型回答 数据模型 Elasticsearch 是基于文档的搜索引擎&#xff0c;它使用 JSON 文档来存储数据。在 Elasticsearch 中&#xff0c;相关的数据通常存储在同…