当前位置: 首页 > news >正文

React:类组件(上)

kerwin老师我来了

类组件的创建

class组件,js里的类命名首字符大写,类里面包括构造函数,方法

组件类要继承React.Component才有效

必须包含render方法

import React from 'react'
class App extends React.Component{render() {return <div>hello react Component</div>}
}
export default App

在index.js里引入并使用标签,就算使用一个类组件了

组件返回的内容必须是封闭的,必须包括在一个完整的标签里

react16.8之前函数组件又叫无状态组件,在之后引入了hooks,函数式组件就有了状态

组件的嵌套

一个页面里只有一个根组件

声明三次组件


import React, { Component } from "react"
//export {Component},es6的模块化导出,也就是之前说过的默认导出,命名导出//声明类组件
class Navbar extends Component {render() {return <div>navbar</div>}
}
//声明函数组件
function Swiper() {return <div>Swiper</div>
}
//箭头函数组件
const Tabbar = () => <div>Tabbar</div>class App extends Component{render(){return (<div><Navbar></Navbar><Swiper></Swiper><Tabbar></Tabbar></div>)}
}
export default App

这样直接在子组件里再写子组件是显示不出来的,其实这种方式也是可以实现爷孙嵌套的,但是先不讲

 class App extends Component{render(){return (<div><Navbar><Child/></Navbar><Swiper></Swiper><Tabbar></Tabbar></div>)}
}

如果想体现Child是Navbar的子组件,需要单独写一个Child,然后在Navbar里调用:


import React, { Component } from "react"
//export {Component},es6的模块化导出,也就是之前说过的默认导出,命名导出
const Child = function () {return <div>Child</div>
}
//声明类组件
class Navbar extends Component {render() {return <div>navbar<Child></Child></div>}
}
//声明函数组件
function Swiper() {return <div>Swiper</div>
}
//箭头函数组件
const Tabbar = () => <div>Tabbar</div>class App extends Component{render(){return (<div><Navbar><Child/></Navbar><Swiper></Swiper><Tabbar></Tabbar></div>)}
}
export default App

这样就好了,还可以体现Navbar和Child的父子关系

组件的样式

{}里的内容当js处理

样式的两种处理:行内样式,使用class,给dom添加className

之所以可以把外部的css等模块直接导入,免不了webpack的支持,webpack把导入的样式模块转化为内部的style样式

而脚手架把webpack封装了

jsx里,for是js的保留字,在react的现版本更推荐htmlFor

当用户点击<label>时,浏览器会查找和for属性匹配的id,把焦点设置到input控件上

import React, { Component } from "react";class App extends Component {render() {return (<div><label htmlFor='username'>用户名:</label><input type='text' id='username' /></div>);}
}export default App;

 react里更推荐行内样式

React 推荐我们使用行内样式,因为 React 觉得每一个组件都是一个独立的整体
这个地方不能加小括号,是回调函数,加了小括号就会立马执行
   <button onClick={this.handleClick()}>add2</button>

并且这个时候onClick={},{}里面是函数的返回值,如果里面的函数加了小括号,就会执行并且把返回值赋给onClick,如果里面的函数没有返回值,就是undefined

开启this大战

import React, { Component } from "react" 
class App extends Component{a=100handleClick2() {console.log('onclick2',this.a)
}render(){return (<button onClick={this.handleClick2}>add2</button></div>)}
}
export default App

希望可以通过点击事件回调函数的this获取App里的a

失败了孩子们                                                                                    我们来看看this是谁:                                                                                             为什么是undefined呢孩子们,谁调用this指向谁,点击以后执行,是react的事件系统调用的,指谁也指不到App啊,a是App里的属性,所以也就获取不了a了

总之就是this指向出问题了,怎么修正this指向呢?以前我们在js里学了好几个更改this的方法,比如bind()、apply()、call()

    <button onClick={this.handleClick2.bind(this)}>add2</button>
//不推荐这种写法

成功了孩子们

问题又来了:为什么是bind()呢?因为call和apply会自动调用函数,而回调函数不需要立马调用,且apply用于数组

如果想获取App的属性,可以直接用箭头函数:

import React, { Component } from "react" 
class App extends Component{a=100handleClick2() {console.log('onclick2',this.a)
}handleClick3 = () => {console.log('onclick3',this.a)}render(){return (<div><input type='text' id='username' /><button onClick={this.handleClick3}>add3</button>
//比较推荐这种写法</div>)}
}
export default App

因为箭头函数会引用上个作用域的this,在这里就是App,所以可以打印App的属性

在里面也使用箭头函数和this调用

       <button onClick={() => {this.handleClick4()//可以传参,比较推荐}}>add4</button>handleClick4 = () => {console.log('onclick4',this.a)
}

里面的this和外面的this是一样的

                                                                                                                                                             

事件处理

React并不会真正的绑定事件到每个具体的元素上,而是采用事件代理的模式       

React 在应用的根节点(通常是 #root 或 #app)上监听所有支持的事件(如 click、change 等)事件发生时,React 会根据事件的 target(触发事件的元素)找到对应的组件,并调用组件中定义的事件处理函数,通常在冒泡阶段处理事件,也就是点击按钮时,事件冒泡到根节点,React 调用 handleClick执行。            

优点是性能优化,减少内存占用、封装了浏览器的事件系统、在组件卸载时自动移除事件监听器,避免内存泄漏   

关于事件对象e                                                                               

和普通浏览器一样,事件handler会被自动传入一个 event 对象,这个对象和普通的浏览器 event 对 象所包含的方法和属性都基本一致。不同的是 React中的 event 对象并不是浏览器提供的,而是它自己内部所构建的,也就是一个合成事件e,它是 React 对浏览器原生事件对象的封装。它同样具有 event.stopPropagation 、 event.preventDefault 这种常用的方法

ref                                                                                    

ref是引用的意思

用一种古旧的方法(react目前已不支持refs访问dom元素或组件了)获取标签:

import React, { Component } from "react" 
class App extends Component{a=100render(){return (<div><input ref='mytext' /><button onClick={()=>{console.log('click1',this.refs.mytext)}}>add1</button></div>)}
}
export default App

这就代表我们获取到这个元素了,获取这个元素以后也可以获取他的属性

新的写法是这么写的:

import React, { Component } from "react" 
class App extends Component{a=100myref=React.createRef()//返回一个ref对象render(){return (<div><input ref='mytext' /><input ref={this.myref} />{/* //把ref绑定在input上 */}<button onClick={() => {console.log('click', this.myref)}}>add1</button></div>)}
}
export default App

获取到的是一个对象,原生dom节点被放在ref的current属性里

注意在类组件里要一直注意this指向的问题

状态

在我还没有学react的时候,我以为这样就可以切换按钮内容了

import React, { Component } from "react" class App extends Component{
render() {let text = '收藏'return (<div>        <button onClick={()=>text = '取消收藏'}>{text}</button></div>)}
}
export default App

实则不然,在react内部并不知道你改变了它,不会渲染,需要用状态来管理

React里我们要尽量减少对dom的操作,因为react内部已经在做dom操作了,你只需要告诉他你要什么

状态可以满足我们不改变dom,通过数据来操作页面的要求

import React, { Component } from "react" class App extends Component{state = {show:true}render() {return (<div><button onClick={() => { this.setState({show:!this.state.show})}}>{ this.state.show?'收藏':'取消收藏'}</button> </div>)}
}
export default App

类组件更像是在用面向对象的思想编程

除了这种写法还有这样设置状态的写法

constructor() {
super()
this.state = {
name: 'React',
isLiked: false
}
}

    super() 用于调用父类(React.Component)的构造函数,保证this正确指向组件实例

    列表渲染

    写写类组件的列表渲染

    import React, { Component } from "react" class App extends Component{state = {list: [{id:1,text:'111'},{ id: 2, text: '222' },{id:3,text:'333'}]
    }render() {return (<div><ul>{this.state.list.map((item) => <li key={item.id}>{ item.text}</li>)}</ul></div>)}
    }
    export default App

    kerwin老师对key的解析:

    Diff 算法 是 React 用于比较虚拟 DOM(Virtual DOM)更新前后差异的核心算法。它的目的是高效地计算出需要更新的部分,从而最小化对真实 DOM 的操作,提升性能。

    对于相同的元素类型,React 会保留该 DOM 节点,只更新变化的属性。

    对于不同的元素类型,React 会销毁旧节点并创建新节点。

    Key :为列表中的每个元素提供唯一的 key,帮助 React 识别元素的移动、添加或删除,为了列表的复用和重排,设置key值,提高性能

    理想的key是数组里的对象,item.id是对象里的一个属性(最好不要拿数组下标,这样删除一个后面的都会乱,不涉及列表的增加、删除、重排是可以设置为索引值的)

    tolist制作

    添加数据

    对于状态的控制和函数组件的useState是相似的,得把更改的结果传入:

    this.state.list.push(this.myref.current.value)不能直接修改状态

    为了避免直接修改状态,我们可以复制一份修改,然后把新的值赋值回去:

         let newList = this.state.list//这样对吗?

    显然是不对的,这叫赋值,赋值的本质二者指向的还是同一块内存地址

    参考博客

    这时候其实还是相当于直接修改了状态,所以我们要进行拷贝(深拷贝和浅拷贝)

    类组件实现的todolist

    import React, { Component } from "react" 
    class App extends Component{a=100myref = React.createRef()//返回一个ref对象state = {list: [{id:1,text:'111'},{ id: 2, text: '222' },{id:3,text:'333'}]
    }render(){return (<div><input ref={this.myref} />{/* //把ref绑定在input上 */}<button onClick={this.handleClick}>add</button><ul>{this.state.list.map((item) => <li key={item.id}>{ item.text}</li>)
    }</ul></div>)}handleClick = () => {console.log('click', this.myref.current.value)//this.state.list.push(this.myref.current.value)不能直接修改状态let newList = [...this.state.list]newList.push({id:this.state.list.length+1,text:this.myref.current.value})this.setState({list:newList})}
    }
    export default App

    删除数据

    用bind绑定删除的元素index

    import React, { Component } from "react" 
    class App extends Component{a=100myref = React.createRef()//返回一个ref对象state = {list: [{id:1,text:'111'},{ id: 2, text: '222' },{id:3,text:'333'}]
    }render(){return (<div><input ref={this.myref} />{/* //把ref绑定在input上 */}<button onClick={this.handleClick}>add</button><ul>{this.state.list.map((item,index) => <li key={item.id}>{ item.text}<button onClick={this.handleDel.bind(this,index)}>delete</button></li>)
    }</ul></div>)}handleClick = () => {console.log('click', this.myref.current.value)//this.state.list.push(this.myref.current.value)不能直接修改状态let newList = [...this.state.list]newList.push({id:this.state.list.length+1,text:this.myref.current.value})this.setState({list:newList})}handleDel = (index) => {console.log('del',index)}
    }
    export default App

    其实我决定根据id删除才是更正确的方式

    import React, { Component } from "react" 
    class App extends Component{a=100myref = React.createRef()//返回一个ref对象state = {list: [{id:1,text:'111'},{ id: 2, text: '222' },{id:3,text:'333'}]
    }render(){return (<div><input ref={this.myref} />{/* //把ref绑定在input上 */}<button onClick={this.handleClick}>add</button><ul>{this.state.list.map((item,index) => <li key={item.id}>{ item.text}<button onClick={()=>this.handleDel(index)}>delete</button></li>)
    }/*{传递参数让你知道你删除的是第几个}*/</ul></div>)}handleClick = () => {console.log('click', this.myref.current.value)//this.state.list.push(this.myref.current.value)不能直接修改状态let newList = [...this.state.list]newList.push({id:this.state.list.length+1,text:this.myref.current.value})this.setState({list:newList})}handleDel = (index) => {console.log('del',index)let newList =this.state.list.slice()//复制newList.splice(index, 1)//删除this.setState(//修改状态{list:newList})}
    }
    export default App

    条件渲染

    根据条件渲染

    增加一些小功能:清除input,在数组长度为0时显示todolist空空如也

    点击按钮控制受控组件的value为0

        handleClick = () => {console.log('click', this.myref.current.value)//this.state.list.push(this.myref.current.value)不能直接修改状态let newList = [...this.state.list]newList.push({id:this.state.list.length+1,text:this.myref.current.value})this.setState({list:newList})this.myref.current.value=''}

    数组长度为0时,显示暂无待办事项

    //三目运算符{ this.state.list.length?null:<div>暂无待办事项</div>}
    //逻辑短路this.state.list.length===0&&<div>暂无待办事项</div>}

    还有一种方法是让他不满足条件时隐藏,满足时显示,要引入css

     <div className={this.state.list.length===0?'':'hidden'}>暂无待办事项</div>.hidden{display:none;}

    相关文章:

    React:类组件(上)

    kerwin老师我来了 类组件的创建 class组件&#xff0c;js里的类命名首字符大写&#xff0c;类里面包括构造函数&#xff0c;方法 组件类要继承React.Component才有效 必须包含render方法 import React from react class App extends React.Component{render() {return <…...

    sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)

    前言 之前的每一关&#xff0c;我们都是在末尾加上注释符&#xff0c;屏蔽后面的语句&#xff0c;这样我们只要闭合了区间之后&#xff0c;差不多就是为所欲为的状态。但如果注释符不生效的情况下&#xff0c;又该如何呢&#xff1f; Less23&#xff08;注释符被过滤&#xff…...

    虚函数和虚表的原理是什么?

    虚函数是一个使用virtual关键字声明的成员函数&#xff0c;在基类中声明虚函数&#xff0c;在子类中可以使用override重写该函数。虚函数根据指针或引用指向的实际对象调用&#xff0c;实现运行时的多态。 虚函数表&#xff08;虚表&#xff09;是一个用于存储虚函数地址的数组…...

    RReadWriteLock读写锁应用场景

    背景 操作涉及一批数据&#xff0c;如订单&#xff0c;可能存在多个场景下操作&#xff0c;先使用读锁&#xff0c;从redis缓存中获取操作中数据 比如 关闭账单&#xff0c; 发起调账&#xff0c; 线下结算&#xff0c; 合并支付 先判断当前操作的数据&#xff0c;是否在…...

    【面试】MySQL

    MySQL 1、数据库三范式2、什么是关系型数据库&#xff0c;什么是非关系型数据库3、什么是数据库存储引擎4、MySQL5.x和8.0有什么区别5、char 和 varchar 的区别6、in 和 exists 的区别7、MySQL 时间类型数据存储建议8、drop、delete 与 truncate 区别9、一条 Sql 的执行顺序10、…...

    Trae AI 开发工具使用手册

    这篇手册将介绍 Trae 的基本功能、安装步骤以及使用方法&#xff0c;帮助开发者快速上手这款工具。 Trae AI 开发工具使用手册 Trae 是字节跳动于 2025 年推出的一款 AI 原生集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在通过智能代码生成、上下文理解和自动化任务…...

    表格columns拼接两个后端返回的字段(以umi框架为例)

    在用组件对前端项目进行开发时&#xff0c;我们会遇到以下情况&#xff1a;项目原型中有取值范围这个表字段&#xff0c;需要存放最小取值到最大取值。 而后端返回给我们的数据是返回了一个最小值和一个最大值&#xff0c; 在columns中我们需要对这两个字段进行拼接&#xff0…...

    常见的算法题python

    字符串倒序 def func1(str):return str[::-1] def func2(str):new_str ""for i in str:new_str inew_strreturn new_str if __name____main__:str"linda"print(func2(str))合并两个有序的列表 def func3(list1,list2):for i in list1:list2.append(i)li…...

    linux学习(十)(磁盘和文件系统(索引节点,文件系统,添加磁盘,交换,LVM公司,挂载))

    Linux 磁盘文件系统 Linux 使用各种文件系统来允许我们从计算机系统的硬件&#xff08;例如磁盘&#xff09;存储和检索数据。文件系统定义了如何在这些存储设备上组织、存储和检索数据。流行的 Linux 文件系统示例包括 EXT4、FAT32、NTFS 和 Btrfs。 每个文件系统都有自己的…...

    k8s v1.28.15部署(kubeadm方式)

    k8s部署&#xff08;kubeadm方式&#xff09; 部署环境及版本 系统版本&#xff1a;CentOS Linux release 7.9.2009 k8s版本&#xff1a;v1.28.15 docker版本&#xff1a;26.1.4 containerd版本&#xff1a;1.6.33 calico版本&#xff1a;v3.25.0准备 主机ip主机名角色配置1…...

    Python开发Scikit-learn面试题及参考答案

    目录 如何用 SimpleImputer 处理数据集中的缺失值? 使用 StandardScaler 对数据进行标准化的原理是什么?与 MinMaxScaler 有何区别? 如何用 OneHotEncoder 对类别型特征进行编码? 解释特征选择中 SelectKBest 与 VarianceThreshold 的应用场景。 如何通过 PolynomialFe…...

    Java在小米SU7 Ultra汽车中的技术赋能

    目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…...

    蓝队第三次

    1.了解什么是盲注 盲注&#xff08;Blind SQL Injection&#xff09;是SQL注入的一种形式&#xff0c;攻击者无法直接通过页面回显或错误信息获取数据&#xff0c;而是通过观察页面的布尔状态&#xff08;真/假&#xff09;或时间延迟来间接推断数据库信息。例如&#xff0c;通…...

    Element Plus中的树组件的具体用法(持续更新!)

    const defaultProps {//子树为节点对象的childrenchildren: children,//节点标签为节点对象的name属性label: name, } 属性 以下是树组件中的常用属性以及作用&#xff1a; data&#xff1a;展示的数据&#xff08;数据源&#xff09; show-checkbox&#xff1a;节点是否可…...

    nodejs使用WebSocket实现聊天效果

    在nodejs中使用WebSocket实现聊天效果&#xff08;简易实现&#xff09; 安装 npm i ws 实现 创建 server.js /*** 创建一个 WebSocket 服务器&#xff0c;监听指定端口&#xff0c;并处理客户端连接和消息。** param {Object} WebSocket - 引入的 WebSocket 模块&#xff0c…...

    通领科技冲刺北交所

    高质量增长奔赴产业新征程 日前&#xff0c;通领科技已正式启动在北交所的 IPO 进程&#xff0c;期望借助资本市场的力量&#xff0c;加速技术升级&#xff0c;推动全球化战略布局。这一举措不仅展现了中国汽车零部件企业的强大实力&#xff0c;也预示着行业转型升级的新突破。…...

    利用LLMs准确预测旋转机械(如轴承)的剩余使用寿命(RUL)

    研究背景 研究问题:如何准确预测旋转机械(如轴承)的剩余使用寿命(RUL),这对于设备可靠性和减少工业系统中的意外故障至关重要。研究难点:该问题的研究难点包括:训练和测试阶段数据分布不一致、长期RUL预测的泛化能力有限。相关工作:现有工作主要包括基于模型的方法、数…...

    comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置

    第一部分&#xff1a; BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …...

    Django工程获取请求参数的几种方式

    在 Django 中获取请求参数的完整方法如下&#xff1a; 一、GET 请求参数获取 def view_func(request):# 获取单个参数&#xff08;推荐方式&#xff09;name request.GET.get(name, default) # 带默认值age request.GET.get(age, 0)# 获取多个同名参数&#xff08;如复选框…...

    使用Qt调用HslCommunication(C++调用C#库)

    使用C/CLI 来调用C#的dll 任务分解&#xff1a; 1、实现C#封装一个调用hsl的dll&#xff1b; 2、实现C控制台调用C#的dll库&#xff1b; 3、把调用C#的dll用C再封装为一个dll&#xff1b; 4、最后再用Qt调用c的dll&#xff1b; 填坑&#xff1a; 1、开发时VS需要安装CLI项目库…...

    C++中的构造函数

    目录 一、什么是构造函数&#xff1a; 二、构造函数的特性和使用&#xff1a; 1、构造函数的特性&#xff1a; 2、构造函数的重载&#xff1a; 三、默认生成的构造函数&#xff1a; 一、什么是构造函数&#xff1a; 在C中&#xff0c;当创建一个对象之后&#xff0c;就会自…...

    MySQL知识点(第一部分)

    MySQL 基础&#xff1a; 1、SQL语句的分类&#xff1a; DDL&#xff1a;用于控制数据库的操作DML&#xff1a;用于控制表结构的字段&#xff0c;增、删、修DQL&#xff1a;用于查询语句DCL&#xff1a;用于管理数据库&#xff0c;用户&#xff0c;数据库的访问 权限。 2、M…...

    Lua怎么学?Lua编程实战:从基础语法到高级特性

    朋友们&#xff0c;大家好&#xff0c;我是袁庭新。我的《Lua编程实战&#xff1a;从基础语法到高级特性》教程上线了&#xff01;这是一套从零掌握Lua编程&#xff0c;涵盖基础到高级&#xff0c;以实战驱动&#xff0c;快速上手Lua开发的精品教程&#xff01; 我为什么要研发…...

    Qt常用控件之 纵向列表QListWidget

    纵向列表QListWidget QListWidget 是一个纵向列表控件。 QListWidget属性 属性说明currentRow当前被选中的是第几行。count一共有多少行。sortingEnabled是否允许排序。isWrapping是否允许换行。itemAlignment元素的对齐方式。selectRectVisible被选中的元素矩形是否可见。s…...

    Manus无需邀请码即可使用的平替方案-OpenManus实测

    文章目录 Manus 简介核心定位技术架构核心特点应用场景性能表现用户体验发展计划OpenManus技术架构与设计理念核心功能特性应用场景案例与闭源Manus的差异对比安装使用与实战演示执行过程记录简单案例-快速写一个helloworld的java程序复杂案例-分析特斯拉汽车近三年财务数据并生…...

    git如何解除远程仓库 改变远程仓库地址

    这三个命令通常一起使用来更改项目的远程仓库地址&#xff1a; 查看当前远程仓库配置&#xff1a;git remote -v移除旧的远程仓库配置&#xff1a;git remote remove origin添加新的远程仓库配置&#xff1a;git remote add origin 新的远程仓库地址 要解除当前项目的远程仓库…...

    VSCode 配置优化指南:打造高效的 uni-app、Vue2/3、JS/TS 开发环境

    VSCode 配置优化指南,适用于 uni-app、Vue2、Vue3、JavaScript、TypeScript 开发,包括插件推荐、设置优化、代码片段、调试配置等,确保你的开发体验更加流畅高效。 1. 安装 VSCode 如果你还未安装 VSCode,可前往 VSCode 官网 下载最新版并安装。 2. 安装推荐插件 (1) Vue…...

    云计算:虚拟化、容器化与云存储技术详解

    在上一篇中,我们深入探讨了网络安全的核心技术,包括加密、认证和防火墙,并通过实际案例和细节帮助读者全面理解这些技术的应用和重要性。今天,我们将转向一个近年来迅速发展的领域——云计算。云计算通过提供按需访问的计算资源,彻底改变了IT基础设施的构建和管理方式。本…...

    oracle 数据导出方案

    工作中有遇到需要将oracle 数据库表全部导出&#xff0c;还需要去除表数据中的换行符。 方案 shell 设计 封装函数 1 function con_oracle() 用于连接oracle 2 function send_file() 用于发送文件 3 主程序 使用循环将所有表导出并发送到数据服务器 主程序 程序代码 #!…...

    电商项目-秒杀系统(四)秒杀异步下单防止重复秒杀

    一、 防止恶意刷单解决 在生产场景下&#xff0c;可能会有一些人会恶意访问当前网站&#xff0c;来进行恶意的刷单。这样会造成当前系统出现一些业务上的业务混乱&#xff0c;出现脏数据&#xff0c;或者造成后端访问压力大等问题。 一般要解决这个问题的话&#xff0c;前端可…...

    Express 中 get 参数获取

    1. 使用 req.query 获取 URL 查询字符串参数 在 GET 请求中&#xff0c;参数通常以查询字符串的形式附加在 URL 后面&#xff0c;格式为 ?参数名1值1&参数名2值2 。Express 里可通过 req.query 对象获取这些参数。 const express require("express"); const …...

    《Python实战进阶》No17: 数据库连接与 ORM(SQLAlchemy 实战)

    No17: 数据库连接与 ORM&#xff08;SQLAlchemy 实战&#xff09; 摘要 本文深入探讨SQLAlchemy在复杂场景下的高级应用&#xff0c;涵盖四大核心主题&#xff1a; 会话生命周期管理&#xff1a;通过事件钩子实现事务监控与审计追踪混合继承映射&#xff1a;结合单表/连接表继…...

    运行OpenManus项目(使用Conda)

    部署本项目需要具备一定的基础&#xff1a;Linux基础、需要安装好Anaconda/Miniforge&#xff08;Python可以不装好&#xff0c;直接新建虚拟环境的时候装好即可&#xff09;&#xff0c;如果不装Anaconda或者Miniforge&#xff0c;只装过Python&#xff0c;需要确保Python是3.…...

    Linux一键美化命令行,一键安装zsh终端插件

    zsh应该是很多人第一个用的Linux终端美化软件 但是其安装略微复杂&#xff0c;让人有些困扰 所以我花了两天写了一键安装脚本&#xff0c;实测运行后直接安装好 适用于Ubuntu、Debian、Red Hat、macOS等系统 直接安装好zsh 以及常用插件 autojump 跳转插件 zsh-syntax-highlig…...

    OpenManus介绍及本地部署体验

    1.OpenManus介绍 OpenManus&#xff0c;由 MetaGPT 团队精心打造的开源项目&#xff0c;于2025年3月发布。它致力于模仿并改进 Manus 这一封闭式商业 AI Agent 的核心功能&#xff0c;为用户提供无需邀请码、可本地化部署的智能体解决方案。换句话说&#xff0c;OpenManus 就像…...

    2025-03-09 学习记录--C/C++-PTA 习题10-7 十进制转换二进制

    合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h>void dectobin( int n );int main() {int n;scanf(…...

    计算机网络----主要内容简介

    这里写目录标题 章节概览每章的大体结构结构功能与服务的关系 一些概念概念一概念二传统的网络层的工作方式&#xff08;路由IP&#xff09;现代的网络层的工作方式&#xff08;SDN&#xff09; 章节概览 其中&#xff0c;网络层分为了两章 下面的红色部分是部分选修 每章的大…...

    基于python大数据的招聘数据可视化与推荐系统

    博主介绍&#xff1a;资深开发工程师&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有…...

    VBA高级应用30例Excel中ListObject对象:提取表内单元格的格式元素

    《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…...

    数据结构基础之《(19)—矩阵处理》

    一、zigzag打印矩阵 Z字形打印矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 打印顺序&#xff1a;1,2,7,13,8,3,4,9,14... 核心技巧&#xff1a;找到coding上的宏观调度 左上角有A、B两个点&#xff0c;A往右一步一步走&#xff0c;B往下一步一步走 写一个…...

    用Python写一个算24点的小程序

    一、运行界面 二、显示答案——递归介绍 工作流程&#xff1a; 1. 基本情况&#xff1a;函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字&#xff0c;它会判断这个数字是否接近 24&#xff08;使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…...

    基于深度学习的网络摄像头图像实时分类实践:从理论到完整实现

    引言&#xff1a;智能视觉感知的新可能 在人工智能技术蓬勃发展的今天&#xff0c;实时图像分类作为计算机视觉的基础任务之一&#xff0c;正在深刻改变着我们的生活。从智能手机的人脸解锁到无人超市的自动结算系统&#xff0c;从工业质检的缺陷检测到医疗影像的辅助诊断&…...

    C++ 算法竞赛STL以及常见模板

    目录 STL /*═══════════════ Vector ═══════════════*/ /*════════════════ Pair ════════════════*/ /*══════════════ String ════════════════*/ /*══════════…...

    【资料分享】wireshark解析脚本omci.lua文件20250306版本发布(独家分享)

    引言 omci.lua文件是Wireshark的OMCI协议解析插件的核心组件。它配合BinDecHex.lua&#xff0c;可以解析OMCI协议的数据包&#xff0c;提取出消息类型、受管实体标识、受管实体属性等关键信息&#xff0c;并以人类可读的形式显示在Wireshark的解码视图中&#xff0c;方便研发人…...

    (dfs 单词搜索)leetcode 79

    核心思路 用双重循环以所有的位置都作为起始点开始遍历 设置边界条件 上下左右都搜一次&#xff0c;不合适就回来&#xff0c;二叉树思想 经过的结点设置"#避免重复搜索导致数据混乱 递归完后要还原原字符 #include<iostream> #include<vector> #include&l…...

    Java常用集合与映射的线程安全问题深度解析

    Java常用集合与映射的线程安全问题深度解析 一、线程安全基础认知 在并发编程环境下&#xff0c;当多个线程同时操作同一集合对象时&#xff0c;若未采取同步措施&#xff0c;可能导致以下典型问题&#xff1a; 数据竞争&#xff1a;多个线程同时修改数据导致结果不可预测状…...

    【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略

    &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 5.1.1 Filebeat Logstash ES Kibana 全链路配置实1. 架构设计与组件选型1.1 技术栈对比分析1.2 硬件配置推荐 2. Filebeat 高级配置2.1 多输入源配置2.2 性能优化参数 3.…...

    服务端和客户端通信(TCP)

    服务端 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace TeachTcpServer {class Program{static void Main(string[] args){#region 知识点一 …...

    练习题:76

    目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 复杂度分析 可能遇到的问题及注意事项 代码实现 代码解释 1. 类的定义与属性初始化 2. 定义属性的访问器&#xff08;getter&#xff09;方法 3. 定义属性的修改器&#xff08;setter&#xff09…...

    SpringBoot3项目-创建及使用

    简单的介绍后端SpringBoot3项目&#xff0c;从0到1搭建一个完整项目&#xff0c;给老项目源码升级备用的知识点 一、创建项目 1、打开IDEA&#xff0c;通过New Project创建项目&#xff0c;如下图&#xff1a; 2、选择Spring Initializr&#xff0c;配置好项目信息&#xf…...