4. React 中的 CSS

news2025/2/13 18:04:38
  • 用例中的干净的脚手架的创建可以参考另一篇文章: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,样式之间会相互影响;
  • 这种编写方式最大的问题是样式之间会相互层叠掉;
  1. 创建一个干净的脚手架

  2. 父组件 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>
        )
      }
    }
    
  3. 创建一个父组件对应的 App.css 文件

    .title {
      font-size: 25px;
      margin: 0;
    }
    
    .content {
      font-size: 15px;
      line-height: 1.5;
    }
    
  4. 如果有两个子组件 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/
  1. 安装 craco

    npm install @craco/craco
    
  2. 安装 craco-less

    npm install craco-less
    
  3. 在项目的根目录下创建 craco.config.js 文件,作为 react 的配置文件

    const CracoLessPlugin = require('craco-less');
    
    module.exports = {
      plugins: [
        {
          plugin: CracoLessPlugin,
        },
      ],
    };
    
  4. 修改 package.json 文件中的项目启动项

    "scripts": {
     "start": "craco start",
      "build": "craco build",
      "test": "craco test",
      "eject": "react-scripts eject"
    },
    
  5. 启动项目

    npm run start
    

【2】vite 创建的项目

  • 编写的Less 文件生成的css,都属于全局的css,样式之间会相互影响;
  1. 在项目中安装 less 和 less-loader,它们是处理 Less 文件所需的依赖项:

    npm install less less-loader --save-dev
    
  2. 修改 vite.config.js 文件,添加对 Less 的支持。

    	export default defineConfig({
    	  plugins: [react()],
    	  css: {
    	    preprocessorOptions: {
    	      less: {
    	        // 可选:如果你需要全局变量或混入文件,可以在这里配置
    	        //additionalData: `@import "./src/styles/global.less";`,
    	      },
    	    },
    	  },
    	});
    
  3. 在 src 目录下创建一个 .less 文件,例如 src/App.less。

    @primary-color: #4caf50;
    
    .app {
      color: @primary-color;
      font-size: 1.5em;
    }
    
  4. 在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} 的形式来编写;
    • 不方便动态来修改某些样式,依然需要使用内联样式的方式;
  1. 创建一个干净的脚手架
  2. 父组件 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>
        );
      }
    }
    
  3. 新建一个 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
  1. 安装 styled-components 库

    npm install styled-components 
    
  2. 在 vscode 中安装插件 vscode-styled-components
    在这里插入图片描述

  3. 创建一个干净的脚手架

  4. 父组件 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>
        );
      }
    }
    
  5. 新建 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>
    
  1. 创建一个干净的脚手架

  2. 安装 classnames 库

     npm install classnames
    
  3. 父组件 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 class4
        const 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进行同样的事情,状态从移动exitingexited

  • 属性:

    属性名类型默认含义
    nodeRefelementReactDOM.findDOMNode对需要转换的 DOM 元素的 React 引用
    inbooleanfalse显示组件;触发进入或退出状态
    childrenFunction或element必需function可以使用子元素代替 React 元素。此函数使用当前转换状态(entering, entered, exiting,exited)调用,可用于将特定于上下文的属性应用于组件
    timeoutnumber过渡的持续时间,以毫秒为单位
  1. 创建一个干净的脚手架

  2. 安装 react-transition-group

    npm install react-transition-group --save
    
  3. 修改 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) => (
                <div
                  style={{
                    ...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:在应用进入动画结束后被触发;
  1. 创建一个干净的脚手架

  2. 安装 react-transition-group

    npm install react-transition-group --save
    
  3. 修改 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>
            <button
              onClick={() => {
                this.setState({ isShow: !isShow });
              }}
            >
              显示/隐藏
            </button>
            <CSSTransition
              nodeRef={this.nodeRef}
              in={isShow}
              timeout={1000}
              classNames="test"
              unmountOnExit
              onEnter={(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>
        );
      }
    }
    
  4. 在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属性;
  1. 创建一个干净的脚手架

  2. 安装 react-transition-group

    npm install react-transition-group --save
    
  3. 修改 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">
              <CSSTransition
                nodeRef={this.nodeRef}
                key={isLogin ? 'exit' : 'login'}
                classNames="login"
                timeout={1000}
              >
                <button
                  ref={this.nodeRef}
                  onClick={(e) =>
                    this.setState({
                      isLogin: !isLogin,
                    })
                  }
                >
                  {isLogin ? '退出' : '登录'}
                </button>
              </CSSTransition>
            </SwitchTransition>
          </div>
        );
      }
    }
    
    export default App;
    
  4. 在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中来完成动画:
  1. 创建一个干净的脚手架

  2. 安装 react-transition-group

    npm install react-transition-group --save
    
  3. 修改 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 (
                  <CSSTransition
                    nodeRef={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;
    
  4. 在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;
    }
    
    

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

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

相关文章

django中间件,中间件给下面传值

1、新建middleware.py文件 # myapp/middleware.py import time from django.http import HttpRequest import json from django.http import JsonResponse import urllib.parse from django.core.cache import cache from comm.Db import Db class RequestTimeMiddleware:def …

【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses

https://github.com/Unispac/Circumventing-Backdoor-Defenses 摘要和介绍 在各种后门毒化攻击中&#xff0c;来自目标类别的毒化样本和干净样本通常在潜在空间中形成两个分离的簇。 这种潜在的分离性非常普遍&#xff0c;甚至在防御研究中成为了一种默认假设&#xff0c;我…

Python基于Django的微博热搜、微博舆论可视化系统(V3.0)【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

不小心删除服务[null]后,git bash出现错误

不小心删除服务[null]后&#xff0c;git bash出现错误&#xff0c;如何解决&#xff1f; 错误描述&#xff1a;打开 git bash、msys2都会出现错误「bash: /dev/null: No such device or address」 问题定位&#xff1a; 1.使用搜索引擎搜索「bash: /dev/null: No such device o…

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件&#xff1f; kubeconfig 文件是 Kubernetes 的配置文件&#xff0c;用于存储集群的访问凭证、API Server 的地址和认证信息&#xff0c;允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置&#xff0c;支持通过上下文&am…

【工业场景】用YOLOv8实现火灾识别

火灾识别任务是工业领域急需关注的重点安全事项,其应用场景和背景意义主要体现在以下几个方面: 应用场景:工业场所:在工厂、仓库等工业场所中,火灾是造成重大财产损失和人员伤亡的主要原因之一。利用火灾识别技术可以及时发现火灾迹象,采取相应的应急措施,保障人员安全和…

(2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)

(2025)通过Ollama光速部署本地DeepSeek-R1模型(支持Windows10/11)_deepseek猫娘咒语-CSDN博客文章浏览阅读1k次&#xff0c;点赞19次&#xff0c;收藏9次。通过Ollama光速部署本地DeepSeek-R1(支持Windows10/11)_deepseek猫娘咒语https://blog.csdn.net/m0_70478643/article/de…

【自然语言处理】TextRank 算法提取关键词、短语、句(Python源码实现)

文章目录 一、TextRank 算法提取关键词 [工具包]二、TextRank 算法提取关键短语[工具包]三、TextRank 算法提取关键句[工具包]四、TextRank 算法提取关键句&#xff08;Python源码实现&#xff09; 一、TextRank 算法提取关键词 [工具包] 见链接 【自然语言处理】TextRank 算法…

记一次Self XSS+CSRF组合利用

视频教程在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 目录&#xff1a;  确认 XSS 漏洞 确认 CSRF 漏洞 这个漏洞是我在应用程序的订阅表单中发现的一个 XSS 漏洞&#xff0c;只能通过 POST 请求进行利用。通常情况下&#xff0c;基于 POST 的…

JDBC如何连接数据库

首先&#xff0c;我们要去下载JDBC的驱动程序 官网下载地址:https://downloads.mysql.com/archives/c-j/ 选择最新版本就可以 然后回到我们idea点击file - project Structure - Modules&#xff0c; 就行了 参考1&#xff1a;如何解决JDBC连接数据库出现问题且对进行数据库操…

AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘

云边有个稻草人-CSDN博客 目录 第一章&#xff1a;DeepSeek与ChatGPT的基础概述 1.1 DeepSeek简介 1.2 ChatGPT简介 第二章&#xff1a;模型架构对比 2.1 Transformer架构&#xff1a;核心相似性 2.2 模型规模与参数 第三章&#xff1a;训练方法与技术 3.1 预训练与微调…

网络安全威胁是什么

1.网络安全威胁的概念 网络安全威胁指网络中对存在缺陷的潜在利用&#xff0c;这些缺陷可能导致信息泄露、系统资源耗尽、非法访问、资源被盗、系统或数据被破坏等。 2.网络安全威胁的类型 物理威胁系统漏洞威胁身份鉴别威胁线缆连接威胁有害程序危险 &#xff08;1&#x…

驱动开发、移植(最后的说法有误,以后会修正)

一、任务明确&#xff1a;把创龙MX8的驱动 按照我们的要求 然后移植到 我们的板子 1.Linux系统启动卡制作&#xff0c; sd卡 先按照 《用户手册—3-2-Linux系统启动卡制作及系统固化》 把创龙的Linux系统刷进去。 2. 把TLIMX8-EVM的板子过一遍 把刚刚烧好系统的sd卡插入 创…

归并排序(C# C++)

目录 1 归并排序的基本概念 2 算法步骤 2-1 分解阶段 2-2 合并阶段 3 代码实现 3-1 C#代码示例&#xff08;该代码在unity环境下&#xff09; 3-2 C代码示例 1 归并排序的基本概念 归并排序&#xff08;Merge Sort&#xff09;是一种经典的分治算法&#xff0c;由约翰…

如何使用智能化RFID管控系统,对涉密物品进行安全有效的管理?

载体主要包括纸质文件、笔记本电脑、优盘、光盘、移动硬盘、打印机、复印机、录音设备等&#xff0c;载体&#xff08;特别是涉密载体&#xff09;是各保密、机要单位保证涉密信息安全、防止涉密信息泄露的重要信息载体。载体管控系统主要采用RFID射频识别及物联网技术&#xf…

华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)

1 概述 KEDA&#xff08;Kubernetes-based Event-Driven Autoscaler&#xff0c;网址是https://keda.sh&#xff09;是在 Kubernetes 中事件驱动的弹性伸缩器&#xff0c;功能非常强大。不仅支持根据基础的CPU和内存指标进行伸缩&#xff0c;还支持根据各种消息队列中的长度、…

入选TPAMI2025!傅里叶变换+目标检测新突破!

今天给大家推荐一个目标检测&#xff0c;好发不卷的新思路&#xff1a;与傅里叶变换结合&#xff01; 一方面&#xff0c;不仅能提升检测的准确性和可靠性&#xff0c;还能增强模型的通用性和适应性&#xff0c;灵活应对复杂场景。比如TPAMI25的FSD模型&#xff0c;便通过该方…

物联网智能语音控制灯光系统设计与实现

背景 随着物联网技术的蓬勃发展&#xff0c;智能家居逐渐成为现代生活的一部分。在众多智能家居应用中&#xff0c;智能灯光控制系统尤为重要。通过语音控制和自动调节灯光&#xff0c;用户可以更便捷地操作家中的照明设备&#xff0c;提高生活的舒适度与便利性。本文将介绍一…

等级保护2.0|网络安全服务

等级保护2.0|网络安全服务 定义 对于国家秘密信息、法人和其他组织及公民专有信息以及公开信息的存储、传输、处理这些信息系统分等级实行安全保护&#xff0c;对信息系统中发生的信息安全时间分等级响应、处置。 思想 对信息安全实行等级化保护和等级化管理 目标 突出重…

安科瑞光伏发电防逆流解决方案——守护电网安全,提升能源效率

安科瑞 华楠 18706163979 在当今大力发展清洁能源的时代背景下&#xff0c;光伏发电作为一种可持续的能源解决方案&#xff0c; 正得到越来越广泛的应用。然而&#xff0c;光伏发电过程中出现的逆流问题&#xff0c;给电网的安全稳定 运行带来了诸多挑战。若不能有效解决&…