4. React 中的 CSS
- 用例中的干净的脚手架的创建可以参考另一篇文章:3.React 组件化开发
- React官方并没有给出在React中统一的样式风格:
- 由此,从普通的css,到css modules,再到css in js,有几十种不同的解决方案,上百个不同的库;
- 大家一致在寻找最好的或者说最适合自己的CSS方案,但是到目前为止也没有统一的方案;
一、内联样式
-
内联样式是官方推荐的一种css样式的写法:
- style 接受一个采用小驼峰命名属性的 JavaScript 对象,,而不是 CSS 字符串;
- 并且可以引用state中的状态来设置相关的样式;
-
内联样式的优点:
- 1.内联样式, 样式之间不会有冲突
- 2.可以动态获取当前state中的状态
-
内联样式的缺点:
- 1.写法上都需要使用驼峰标识
- 2.某些样式没有提示
- 3.大量的样式, 代码混乱
- 4.某些样式无法编写(比如伪类/伪元素)
-
所以官方依然是希望内联样式和普通的css来结合编写;
import React, { Component } from 'react';export class App extends Component {constructor() {super();this.state = {fontSize: 25,};}render() {const { fontSize } = this.state;return (<div><p style={{fontSize: '20px', color: 'red',backgroundColor: 'yellow'}}>内连样式</p><p style={{fontSize: fontSize + 'px', color: 'blue'}}>内连样式2</p></div>);} }export default App;
二、CSS 文件
- 普通的css我们通常会编写到一个单独的文件,之后再进行引入。
- 这样的编写方式和普通的网页开发中编写方式是一致的:
- 如果我们按照普通的网页标准去编写,那么也不会有太大的问题;
- 但是组件化开发中我们总是希望组件是一个独立的模块,即便是样式也只是在自己内部生效,不会相互影响;
- 但是普通的css都属于全局的css,样式之间会相互影响;
- 这种编写方式最大的问题是样式之间会相互层叠掉;
-
创建一个干净的脚手架
-
父组件 App.js(App.jsx) 内容如下
import React, { Component } from 'react' // 引入对应的css样式 import "./App.css"export default class App extends Component {render() {return (<div><h3 className="title">我是标题</h3><p className="content">我是内容我是内容我是内容我是内容我是内容</p></div>)} } -
创建一个父组件对应的 App.css 文件
.title {font-size: 25px;margin: 0; }.content {font-size: 15px;line-height: 1.5; } -
如果有两个子组件 Child1.jsx,Child2.jsx,其中Child2.jsx, Child1.jsx对应有自己的css文件,Child2.css, Child1.css , 这两个css文件中相同css类名之间会相互影响,即css 文件之间并不是只对其对应的模块有效
三、Less 配置和编写
【1】create-react-app 创建的项目
- 我们需要修改 create-react-app 的默认配置,这里我们使用 craco (一个对 create-react-app 进行自定义配置的社区解决方案)。
- 编写的Less 文件生成的css,都属于全局的css,样式之间会相互影响;
- 针对 less 的使用,可以参考 https://4x-ant-design.antgroup.com/docs/react/use-with-create-react-app-cn/
-
安装 craco
npm install @craco/craco -
安装 craco-less
npm install craco-less -
在项目的根目录下创建 craco.config.js 文件,作为 react 的配置文件
const CracoLessPlugin = require('craco-less');module.exports = {plugins: [{plugin: CracoLessPlugin,},], }; -
修改 package.json 文件中的项目启动项
"scripts": {"start": "craco start","build": "craco build","test": "craco test","eject": "react-scripts eject" }, -
启动项目
npm run start
【2】vite 创建的项目
- 编写的Less 文件生成的css,都属于全局的css,样式之间会相互影响;
-
在项目中安装 less 和 less-loader,它们是处理 Less 文件所需的依赖项:
npm install less less-loader --save-dev -
修改 vite.config.js 文件,添加对 Less 的支持。
export default defineConfig({plugins: [react()],css: {preprocessorOptions: {less: {// 可选:如果你需要全局变量或混入文件,可以在这里配置//additionalData: `@import "./src/styles/global.less";`,},},},}); -
在 src 目录下创建一个 .less 文件,例如 src/App.less。
@primary-color: #4caf50;.app {color: @primary-color;font-size: 1.5em; } -
在src/App.jsx 组件中引入该 Less 文件。
import React, { memo } from 'react'; import './App.less';const App = memo(() => {return <div className='app'>App</div>; });export default App;
四、CSS modules
-
css modules并不是React特有的解决方案,而是所有使用了类似于webpack配置的环境下都可以使用的。
- 如果在其他项目中使用它,那么我们需要自己来进行配置,比如配
webpack.config.js中的modules: true等。 - React的脚手架已经内置了css modules的配置: .css/.less/.scss 等样式文件都需要修改成 .module.css/.module.less/.module.scss 等; 之后就可以引用并且进行使用了;
- 如果在其他项目中使用它,那么我们需要自己来进行配置,比如配
-
css modules确实解决了局部作用域的问题,也是很多人喜欢在React中使用的一种方案。
-
但是这种方案也有自己的缺陷:
- 引用的类名,不能使用连接符(.home-title),在JavaScript中是不识别的;
- 所有的className都必须使用
{style.className}的形式来编写; - 不方便动态来修改某些样式,依然需要使用内联样式的方式;
- 创建一个干净的脚手架
- 父组件 App.js(App.jsx) 内容如下
import React, { Component } from 'react'; // 引入样式 import appStyle from './App.module.css';export default class App extends Component {render() {return (<div>{/* 使用样式 */}<div className={appStyle.title}>标题</div><p className={appStyle.content}>我是内我是内容我是内容我是内容我是内容我是内容容</p></div>);} } - 新建一个 App.module.css 文件,内容如下
.title {font-size: 25px;color: red; }.content {font-size: 15px;line-height: 1.2; }
五、CSS in JS
- 官方文档也有提到过CSS in JS这种方案:
- “CSS-in-JS” 是指一种模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定义;
- 注意此功能并不是 React 的一部分,而是由第三方库提供;
- React 对样式如何定义并没有明确态度;
- 在传统的前端开发中,我们通常会将结构(HTML)、样式(CSS)、逻辑(JavaScript)进行分离。
- 但是在前面的学习中,我们就提到过,React的思想中认为逻辑本身和UI是无法分离的,所以才会有了JSX的语法。
- 样式呢?样式也是属于UI的一部分;
- 事实上CSS-in-JS的模式就是一种将样式(CSS)也写入到JavaScript中的方式,并且可以方便的使用JavaScript的状态;
- 所以React有被人称之为 All in JS;
- 目前比较流行的CSS-in-JS的库有哪些呢?
- styled-components
- emotion
- glamorous
- 目前可以说styled-components依然是社区最流行的CSS-in-JS库
【1】 使用 styled-components
- styled-components的本质是通过函数的调用,最终创建出一个组件:
- 更多用法可以参考官网:https://styled-components.com/docs
-
安装 styled-components 库
npm install styled-components -
在 vscode 中安装插件 vscode-styled-components

-
创建一个干净的脚手架
-
父组件 App.js(App.jsx) 内容如下
import React, { Component } from 'react'; import { AppWrapper, ContentWrapper, FooterWrapper } from './Style.js';export default class App extends Component {constructor() {super();this.state = {color: '#999',contentStyle: {fontSize: '14'},};}changeContentColor() {this.setState({color: '#333',});}render() {const { contentStyle, color } = this.state;return (<AppWrapper><h2 className="title"><p>标题</p><small>小标题</small></h2>{/* 通过结构传递 props */}<ContentWrapper color={color} {...contentStyle}><p>内容</p><ul><li>列表1</li><li>列表2</li><li>列表3</li><li>列表4</li></ul><button onClick={(e) => this.changeContentColor()}>修改内容的颜色</button></ContentWrapper><FooterWrapper>底部</FooterWrapper></AppWrapper>);} } -
新建 Style.js 文件,用于设置样式
import styled from 'styled-components';// 用法参考:函数模板字符串 // styled.div 是一个函数,返回一个组件 export const AppWrapper = styled.div`.title {color: red;p {font-size: 20px;}small {font-size: 12px;}} `;// 通过 props 传递参数 export const ContentWrapper = styled.div`p {color: ${(props) => props.color};}ul {li {color: ${(props) => props.color};font-size: ${(props) => props.fontSize}px;&:hover {color: red;}cursor: pointer;}} `;// 设置默认值 export const FooterWrapper = styled.div.attrs((props) => ({color: props.color || 'yellow', }))`color: ${(props) => props.color}; `;
六、React 中添加 class
【1】classnames 库
-
git 仓库:https://github.com/JedWatson/classnames
-
classnames 是一个用于动态地构建 CSS 类名字符串的 JavaScript 库,常用于 React 项目中。它可以根据条件来组合多个类名,简化了在模板中根据逻辑添加或删除 CSS 类名的过程。
-
不使用 classnames 库的代码
<div className={`button ${isActive ? 'button-active' : ''} ${isDisabled ? 'button-disabled' : ''}`}>Click me </div> -
使用 classnames 库的代码
import classNames from 'classnames';<div className={classNames('button', { 'button-active': isActive, 'button-disabled': isDisabled })}>Click me </div>
-
创建一个干净的脚手架
-
安装 classnames 库
npm install classnames -
父组件 App.js(App.jsx) 内容如下
import React, { Component } from 'react'; import classNames from 'classnames';export default class App extends Component {render() {//结果:"class1 class2"const classname1 = classNames('class1', 'class2');//结果:"class1 class2"const classname2 = classNames('class1', { class2: true });//结果:"class1 class2"const classname3 = classNames('class1', { class2: 1 });//结果:"class1"const classname4 = classNames('class1', { class2: false });//结果:"class1"const classname5 = classNames({ class1: true, class2: false });//结果:"class1 class2"const classname6 = classNames(['class1', 'class2']);//结果:class1 class3 class4const classname7 = classNames('class1', { class2: false }, ['class3','class4',]);return (<div><div className={classname1}>classname1</div><div className={classname2}>classname2</div><div className={classname3}>classname3</div><div className={classname4}>classname4</div><div className={classname5}>classname5</div><div className={classname6}>classname6</div><div className={classname7}>classname7</div></div>);} }
七、React 的过渡动画
(一) react-transition-group 介绍
-
在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验。
-
当然,我们可以通过原生的CSS来实现这些过渡动画,但是React社区为我们提供了react-transition-group用来完成过渡动画。
-
React曾为开发者提供过动画插件 react-addons-css-transition-group,后由社区维护,形成了现在的 react-transition-
group。 -
这个库可以帮助我们方便的实现组件的 入场 和 离场 动画,使用时需要进行额外的安装:
npm install react-transition-group --save -
react-transition-group本身非常小,不会为我们应用程序增加过多的负担。
-
github 地址:https://github.com/reactjs/react-transition-group
-
官方网站:https://reactcommunity.org/react-transition-group/
(二) react-transition-group主要组件
【1】Transition 组件
-
该组件是一个和平台无关的组件(不一定要结合CSS);如果需要结合 CSS 最好使用 CSSTransition,它继承了Transition的所有特性,而且包含了一些额外的特性。
-
Transition组件允许您使用简单的声明式 API描述随时间从一个组件状态到另一个组件状态的转换
-
默认情况下,Transition组件不会改变它呈现的组件的行为,它只跟踪组件的进入和退出状态。赋予这些状态以意义和效果取决于您
-
转换可以处于4 种主要状态
- entering 进入中
- entered 进入后
- exiting 离开中
- exited 离开后
-
过渡状态通过
in属性切换。当为 true 时组件开始进入阶段。在此阶段,组件将从其当前的过渡状态转移到entering过渡期间,然后在entered完成后进入该阶段 -
in改为false进行同样的事情,状态从移动
exiting到exited -
属性:
属性名 类型 默认 含义 nodeRef element ReactDOM.findDOMNode 对需要转换的 DOM 元素的 React 引用 in boolean false 显示组件;触发进入或退出状态 children Function或element 必需 function可以使用子元素代替 React 元素。此函数使用当前转换状态(entering, entered, exiting,exited)调用,可用于将特定于上下文的属性应用于组件 timeout number 无 过渡的持续时间,以毫秒为单位
-
创建一个干净的脚手架
-
安装 react-transition-group
npm install react-transition-group --save -
修改 src/App.js(App.jsx) 文件,引入Transition 组件
import React, { PureComponent } from 'react'; import { Transition } from 'react-transition-group';export class App extends PureComponent {constructor() {super();this.nodeRef = React.createRef(null);this.state = {isShowTitle: true,defaultStyle: {transition: `opacity 1000ms ease-in-out`,opacity: 0,},transitionStyles: {entering: { opacity: 1 },entered: { opacity: 1 },exiting: { opacity: 0 },exited: { opacity: 0 },},};}changeSonShow() {this.setState({isShowTitle: !this.state.isShowTitle,});}render() {const { isShowTitle, defaultStyle, transitionStyles } = this.state;return (<div><button onClick={() => this.changeSonShow()}>{isShowTitle ? '显示标题' : '隐藏标题'}</button><Transition nodeRef={this.nodeRef} in={isShowTitle} timeout={1000}>{(state) => (<divstyle={{...defaultStyle,...transitionStyles[state],}}>标题标题标题标题标题标题标题标题</div>)}</Transition></div>);} }export default App;
【2】CSSTransition 组件
- CSSTransition是基于Transition组件构建的:
- CSSTransition执行过程中,有三个状态:appear、enter、exit;
- 它们有三种状态,需要定义对应的CSS样式:
- 第一类,开始状态:对于的类是-appear、-enter、exit;
- 第二类:执行动画:对应的类是-appear-active、-enter-active、-exit-active;
- 第三类:执行结束:对应的类是-appear-done、-enter-done、-exit-done;
- CSSTransition常见对应的属性:
-
in:触发进入或者退出状态
- 如果添加了unmountOnExit={true},那么该组件会在执行退出动画结束后被移除掉;
- 当in为true时,触发进入状态,会添加-enter、-enter-acitve的class开始执行动画,当动画执行结束后,会移除两个class,
并且添加-enter-done的class; - 当in为false时,触发退出状态,会添加-exit、-exit-active的class开始执行动画,当动画执行结束后,会移除两个class,并
且添加-enter-done的class;
-
classNames:动画class的名称
- 决定了在编写css时,对应的class名称:比如card-enter、card-enter-active、card-enter-done;
-
timeout:
- 过渡动画的时间
-
appear:
- 是否在初次进入添加动画(需要和in同时为true)
-
unmountOnExit:
- 如果为true时,退出后将卸载组件
-
- CSSTransition对应的钩子函数:主要为了检测动画的执行过程,来完成一些JavaScript的操作
- onEnter:在进入动画之前被触发;
- onEntering:在应用进入动画时被触发;
- onEntered:在应用进入动画结束后被触发;
-
创建一个干净的脚手架
-
安装 react-transition-group
npm install react-transition-group --save -
修改 src/App.js(App.jsx) 文件,引入CSSTransition 组件
import React, { PureComponent } from 'react'; import { CSSTransition } from 'react-transition-group'; import './style.css';export default class App extends PureComponent {constructor() {super();this.nodeRef = React.createRef(null);this.state = {isShow: true,};}render() {const { isShow } = this.state;return (<div><buttononClick={() => {this.setState({ isShow: !isShow });}}>显示/隐藏</button><CSSTransitionnodeRef={this.nodeRef}in={isShow}timeout={1000}classNames="test"unmountOnExitonEnter={(e) => console.log('开始进入动画')}onEntering={(e) => console.log('进入动画进行中')}onEntered={(e) => console.log('进入动画结束')}onExit={(e) => console.log('开始退出动画')}onExiting={(e) => console.log('退出动画进行中')}onExited={(e) => console.log('退出动画结束')}><h2 ref={this.nodeRef}>文字文字文字文字文字文字</h2></CSSTransition></div>);} } -
在src/App.js 文件所处的文件夹下创建 style.css 文件
.test-enter {opacity: 0; }.test-enter-active {opacity: 1;transition: opacity 1s ease; }.test-exit {opacity: 1; }.test-exit-active {opacity: 0;transition: opacity 1s, transform 1s; }
【3】SwitchTransition 组件
-
SwitchTransition可以完成两个组件之间切换的炫酷动画:
- 比如我们有一个按钮需要在on和off之间切换,我们希望看到on先从左侧退出,off再从右侧进入;
- 这个动画在vue中被称之为 vue transition modes;
- react-transition-group中使用SwitchTransition来实现该动画;
-
SwitchTransition中主要有一个属性:mode,有两个值
- in-out:表示新组件先进入,旧组件再移除;
- out-in:表示旧组件先移除,新组建再进入;
-
如何使用SwitchTransition呢?
- SwitchTransition组件里面要有CSSTransition或者Transition组件,不能直接包裹你想要切换的组件;
- SwitchTransition里面的CSSTransition或Transition组件不再像以前那样接受in属性来判断元素是何种状态,取而代之的是
key属性;
-
创建一个干净的脚手架
-
安装 react-transition-group
npm install react-transition-group --save -
修改 src/App.js(App.jsx) 文件,引入SwitchTransition 和 CSSTransition 组件
import React, { PureComponent } from 'react'; import { SwitchTransition, CSSTransition } from 'react-transition-group'; import './style.css';export class App extends PureComponent {constructor() {super();this.nodeRef = React.createRef(null);this.state = {isLogin: false,};}render() {const { isLogin } = this.state;return (<div style={{ textAlign: 'center' }}><SwitchTransition mode="out-in"><CSSTransitionnodeRef={this.nodeRef}key={isLogin ? 'exit' : 'login'}classNames="login"timeout={1000}><buttonref={this.nodeRef}onClick={(e) =>this.setState({isLogin: !isLogin,})}>{isLogin ? '退出' : '登录'}</button></CSSTransition></SwitchTransition></div>);} }export default App; -
在src/App.js 文件所处的文件夹下创建 style.css 文件
.login-enter {transform: translateX(100px);opacity: 0; }.login-enter-active {transform: translateX(0);opacity: 1;transition: all 1s ease; }.login-exit {transform: translateX(0);opacity: 1; }.login-exit-active {transform: translateX(-100px);opacity: 0;transition: all 1s ease; }
【4】TransitionGroup 组件
- 当我们有一组动画时,需要将这些CSSTransition放入到一个TransitionGroup中来完成动画:
-
创建一个干净的脚手架
-
安装 react-transition-group
npm install react-transition-group --save -
修改 src/App.js(App.jsx) 文件,引入TransitionGroup 和 CSSTransition 组件
import React, { PureComponent } from 'react'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; import './style.css';export class App extends PureComponent {constructor() {super();this.state = {curId: 4,books: [{id: 1,name: '你不知道的JS',price: 99,nodeRef: React.createRef(null),},{id: 2,name: 'JS高级程序设计',price: 88,nodeRef: React.createRef(null),},{id: 3,name: 'Vue高级设计',price: 66,nodeRef: React.createRef(null),},],};}addNewBook() {const { books, curId } = this.state;this.setState({books: [...books,{ id: curId, name: 'ES' + curId, price: 55, nodeRef: React.createRef(null) },],});this.setState({ curId: curId + 1 });}delBookHandle(index) {const { books } = this.state;this.setState({books: books.filter((item, i) => i !== index),});}render() {const { books } = this.state;return (<div><TransitionGroup component="ul">{books.map((item, index) => {return (<CSSTransitionnodeRef={item.nodeRef}key={item.id}classNames="book"timeout={1000}><li ref={item.nodeRef}><span>{item.name}-{item.price}</span><button onClick={() => this.delBookHandle(index)}>删除</button></li></CSSTransition>);})}</TransitionGroup><button onClick={() => this.addNewBook()}>添加书籍</button></div>);} }export default App; -
在src/App.js 文件所处的文件夹下创建 style.css 文件
.book-enter {transform: translateX(100px);opacity: 0; }.book-enter-active {transform: translateX(0);opacity: 1;transition: all 1s ease; }.book-exit {transform: translateX(0);opacity: 1; }.book-exit-active {transform: translateX(150px);opacity: 0;transition: all 1s ease; }
相关文章:
4. React 中的 CSS
用例中的干净的脚手架的创建可以参考另一篇文章:3.React 组件化开发React官方并没有给出在React中统一的样式风格: 由此,从普通的css,到css modules,再到css in js,有几十种不同的解决方案,上百…...
【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞
文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1:代码分析 4.2:流量分析 5.poc代码: 1.漏洞描述 漏洞编号:CVE-2019-17621 漏洞名称:D-Link DIR-859 命令注入漏洞 威胁等级:严重 漏洞详…...
FastExcel + Java:打造高效灵活的Excel数据导入导出解决方案
作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 基于AOP的数据字典实现…...
fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系
Transformer、Seq2Seq、Encoder-Decoder、Attention由这四者之间的关系可以从模型架构的发展脉络来理解: Seq2Seq 与 Encoder–Decoder 模型 “Seq2Seq”(sequence‐to‐sequence)是一类用于将一个变长序列映射为另一个变长序列的任务&#x…...
使用Hexo部署NexT主体网站
一.使用git提交文件 参考: 从零开始搭建个人博客(超详细) - 知乎 致谢! 第一种:本地没有 git 仓库 直接将远程仓库 clone 到本地;将文件添加并 commit 到本地仓库;将本地仓库的内容push到远程仓…...
图书管理项目(spring boot + Vue)
想要该项目的话,就 jia 我,并在评论区给我说一下,只需要1元,我把整个项目发给你 jia微:18439421203(名字叫:Bingo) 运行图片:...
python实现常见数学概率分布
常见正态分布 1.贝塔分布1.1 概率密度函数1.2参数对分布形状的影响1.3 应用场景1.4 python实现 2. 帕累托分布(80/20法则)3. 正态分布(高斯分布)3.1 正态分布对应性质3.2 正态分布对应图像实现的完整项目示例,包含权限控制、数据加载状态处理、性能优化等常见高级功能。创建一个简单的博客系统: // 项目结构: src/ |-- components/ | |-- ArticleList.jsx | |-- Article.jsx | |-- He…...
基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录
目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…...
在CT107D单片机综合训练平台上实现外部中断控制LED闪烁
引言 在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在…...
HTML之JavaScript使用JSON
HTML之JavaScript使用JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是JavaScript对象的字符串表示法,它使用文本表示一个js对象的信息,可以将json字符串转换…...
算法很美笔记(Java)——树
性质 树 上面的性质因为两个结点由一条边连成 结点数目越多,算法复杂度越高 二叉树 结构 层次遍历 利用队列,弹一个,加N个(队列里弹出一个元素,就把这个元素的所有孩子加进去) 具体来说:指…...
SQL面试题4:相互关注问题
引言 在社交媒体和各类社区平台蓬勃发展的当下,用户之间的关系网络成为了平台运营和数据分析的关键部分。相互关注作为一种重要的社交关系,不仅反映了用户之间的紧密程度,还对平台的社交生态、内容传播等方面有着深远影响。本文将聚焦于 SQL…...
ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用
作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…...
jvm 线程监控调试
文章目录 前言一、使用JDK工具转储线程文件(如jstack)1. 找到Java进程的PID:2. 使用jstack生成线程转储文件:3.验证生成的线程转储文件:二、分析文件1.使用在线工具进行分析上传thread-dump文件,等待解析完成2.查看分析结果总结前言 提示:使用jdk自带工具转储线程监控文…...
25、深度学习-自学之路-卷积神经网络基于MNIST数据集的程序展示
import keras #添加Keraskuimport sys,numpy as np from keras.utils import np_utilsimport osfrom keras.datasets import mnist print("licheng:""20"\n) np.random.seed(1)(x_train,y_train),(x_test,y_test) mnist.load_data() #第一次…...
【C++】解锁<list>的正确姿势
> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 …...
Qt中的事件
写一个 可以拖动的按钮 DraggablePushButton.h 头文件 #ifndef DRAGGABLEPUSHBUTTON_H #define DRAGGABLEPUSHBUTTON_H#include <QPushButton> #include <QMouseEvent>class DraggablePushButton : public QPushButton {Q_OBJECTpublic:explicit DraggablePushBu…...
变化检测相关论文可读list
一些用得上的: 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读:代码解读 | 极简代码遥感语义分割,结合GDAL从零实现,以U-Net和建筑物提取为例 NeurIPS2024: https://mp.w…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
