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

12.12【java exp4】react table全局搜索tailwindcss 布局 (Layout) css美化 3. (rowId: number

react table

  1. 创建一个下拉菜单,允许用户选择要搜索的列。
  2. 创建一个输入框,用于输入搜索关键词。
  3. 根据用户的选择,动态地应用过滤器到指定的列

全局搜索

import React from 'react';
import { useTable, useFilters, useGlobalFilter, useSortBy, usePagination } from 'react-table';// 自定义过滤组件
function ColumnFilter({ column }) {const { filterValue, setFilter } = column;return (<inputvalue={filterValue || ''}onChange={(e) => setFilter(e.target.value)}placeholder={`Search ${column.id}`}style={{ marginBottom: '0.5rem' }}/>);
}const data = [{ id: 1, name: 'Alice', age: 24, email: 'alice@example.com' },{ id: 2, name: 'Bob', age: 30, email: 'bob@example.com' },{ id: 3, name: 'Charlie', age: 28, email: 'charlie@example.com' },
];const columns = React.useMemo(() => [{Header: 'ID',accessor: 'id',Filter: ColumnFilter, // 为 ID 列添加过滤器},{Header: 'Name',accessor: 'name',Filter: ColumnFilter, // 为 Name 列添加过滤器},{Header: 'Age',accessor: 'age',Filter: ColumnFilter, // 为 Age 列添加过滤器},{Header: 'Email',accessor: 'email',Filter: ColumnFilter, // 为 Email 列添加过滤器},],[]
);const DataTable = () => {const {getTableProps,getTableBodyProps,headerGroups,rows,prepareRow,state: { globalFilter },setGlobalFilter,} = useTable({columns,data,defaultColumn: { Filter: ColumnFilter }, // 为所有列添加默认过滤器},useFilters, // 启用列过滤useGlobalFilter, // 启用全局过滤useSortBy, // 启用排序usePagination // 启用分页);// 全局搜索输入框const [searchInput, setSearchInput] = React.useState('');const handleSearchChange = (e) => {const value = e.target.value || '';setSearchInput(value);setGlobalFilter(value);};return (<div>{/* 全局搜索栏 */}<div><inputvalue={searchInput}onChange={handleSearchChange}placeholder="Search all columns..."style={{ marginBottom: '1rem' }}/></div>{/* 表格 */}<table {...getTableProps()} style={{ border: 'solid 1px blue' }}><thead>{headerGroups.map((headerGroup) => (<tr {...headerGroup.getHeaderGroupProps()}>{headerGroup.headers.map((column) => (<th {...column.getHeaderProps(column.getSortByToggleProps())}>{column.render('Header')}{/* 显示排序图标 */}<span>{column.isSorted ? (column.isSortedDesc ? ' 🔽' : ' 🔼') : ''}</span>{/* 渲染列过滤器 */}<div>{column.canFilter ? column.render('Filter') : null}</div></th>))}</tr>))}</thead><tbody {...getTableBodyProps()}>{rows.map((row) => {prepareRow(row);return (<tr {...row.getRowProps()}>{row.cells.map((cell) => (<td {...cell.getCellProps()}>{cell.render('Cell')}</td>))}</tr>);})}</tbody></table></div>);
};export default DataTable;

tailwindcss

className 是 React 中用于指定 CSS 类名的一个属性,它并不是 Tailwind CSS 特有的,而是 React 生态系统中的一个标准属性。Tailwind CSS 是一个实用优先的 CSS 框架,可以帮助你快速构建现代化的用户界面,但它并不会改变 className 属性的本质

  1. 引入 Tailwind 样式: 在你的项目的入口 CSS 文件(通常是 src/index.css)中添加以下内容:

    @tailwind base;
    @tailwind components;
    @tailwind utilities;

Tailwind CSS 是一个高度可定制的、低级别的 CSS 框架,它提供了一套实用工具类(utility-first),而不是预定义的组件样式。与传统的 CSS 框架(如 Bootstrap)不同,Tailwind 不提供现成的按钮、卡片等组件样式,而是通过组合简单的 CSS 类来构建自定义的设计。这使得你可以完全控制设计的每个细节,同时保持代码的简洁和一致性

@tailwind base:
这个指令会引入 Tailwind CSS 的基础样式,包括归一化样式(Normalize CSS)和一些基本的 HTML 元素样式。
例如,它会重置浏览器的默认样式,确保不同浏览器之间的样式一致性。
@tailwind components:
这个指令会引入 Tailwind CSS 的组件样式。
组件样式通常用于定义一些常见的 UI 组件,如按钮、表单元素等。
你可以在这里添加自己的组件样式,或者使用 Tailwind CSS 提供的默认样式。
@tailwind utilities:
这个指令会引入 Tailwind CSS 的实用工具类(Utility Classes)。
实用工具类是一些预定义的 CSS 类,用于快速调整元素的样式,如 text-center、bg-blue-500 等。
这些类可以在 HTML 中直接使用,无需编写额外的 CSS 代码。

  • Tailwind CSS 提供了大量的低级别的、原子化的类名,每个类名对应一个特定的样式属性。
  • 这些类名可以在 HTML 或 JSX 中直接使用,而不需要编写额外的 CSS 文件
  • 由于类名是预先定义好的,开发人员可以立即看到样式的变化,无需来回切换文件进行调试。
  • 这提高了开发效率,减少了上下文切换的时间。
  • 布局 (Layout)
  • Flexbox 和 Grid

整体布局:
使用 p-4 为整个组件添加内边距。
使用 flex 和 items-center 使搜索栏中的元素在同一行对齐。
选择列和搜索输入框:
使用 mr-2 添加右侧外边距。
使用 p-2 添加内边距。
使用 border 和 rounded 添加边框和圆角。
表格:
使用 w-full 使表格宽度占满父容器。
使用 border 和 border-gray-300 添加边框。
使用 bg-gray-100 为表头背景添加浅灰色。
使用 p-2 和 text-left 为表头单元格添加内边距和左对齐。
使用 border-b 和 border-gray-300 为表头和表格行添加底部边框。
分页控制:
使用 mt-4 为分页控件添加顶部外边距。
使用 flex 和 justify-between 使分页按钮和页面信息分别位于两端。
使用 px-2 和 py-1 为按钮添加水平和垂直内边距。
使用 mr-2 为按钮之间添加右侧外边距。
使用 bg-blue-500 和 text-white 为按钮添加蓝色背景和白色文字。
使用 rounded 为按钮添加圆角。
使用 disabled:bg-gray-300 为禁用状态的按钮添加浅灰色背景。
使用 ml-2 为输入框和选择框添加左侧外边距

css美化

如果你导入了多个 CSS 文件,并且这些文件中有重叠的样式规则,CSS 的层叠机制(Cascading)和优先级(Specificity)将决定最终应用的样式。

CSS 层叠机制决定了当多个规则应用于同一个元素时,哪个规则会生效。
规则的优先级顺序如下:
内联样式(Inline styles)
ID 选择器(ID selectors)
类选择器、属性选择器和伪类(Class selectors, attribute selectors, and pseudo-classes)
标签选择器和伪元素(Element selectors and pseudo-elements)
通用选择器、子选择器和相邻兄弟选择器(Universal selectors, child combinators, and adjacent sibling combinators)

优先级是根据选择器的复杂度来计算的。优先级越高,规则越有可能被应用。
计算方法:
内联样式:1000
ID 选择器:100
类选择器、属性选择器和伪类:10
标签选择器和伪元素:1
通用选择器、子选择器和相邻兄弟选择器:0

如果两个规则具有相同的优先级,那么后导入的样式会覆盖先导入的样式。

:root:
:root 选择器表示文档的根元素,在 HTML 中就是 <html> 标签。
在 :root 中定义的 CSS 变量可以在整个文档中使用。
--background 和 --foreground:
--background 和 --foreground 是自定义的 CSS 变量。
--background 被设置为白色(#ffffff)。
--foreground 被设置为深灰色(#171717)

@media (prefers-color-scheme: dark):
这是一个媒体查询,用于检测用户的偏好颜色方案是否为暗模式。
prefers-color-scheme: dark 会匹配用户设置了暗模式的情况。
--background 和 --foreground 的重定义:
在暗模式下,--background 被重新设置为深黑色(#0a0a0a)。
--foreground 被重新设置为浅灰色(#ededed)。
 

color 和 background:
color 属性使用 var(--foreground) 变量,这意味着文本颜色会根据用户的颜色方案(亮模式或暗模式)自动调整。
background 属性使用 var(--background) 变量,这意味着背景颜色也会根据用户的颜色方案自动调整。
font-family:
font-family 属性设置了默认的字体系列,使用 Arial、Helvetica 和 sans-serif 作为备选字体。

要使表格更加紧凑,可以通过调整 CSS 样式来减少单元格的内边距(padding)、边框宽度(border-width)以及其他相关的间距属性。以下是具体的调整步骤和代码示例:
1. 减少单元格内边距
通过减少 p-2 类中的内边距值,可以使表格单元格更加紧凑。
2. 调整边框宽度
可以将边框宽度从 border 改为更细的边框,例如 border-t 和 border-b 来减少水平方向的边框。
3. 调整表格整体宽度
可以将表格的宽度从 w-full 改为一个固定宽度或百分比宽度,以控制表格的整体尺寸。

减少外边距和内边距:
将 p-4 改为 p-2 或 p-1。
将 mb-4 改为 mb-2。
将 px-2 py-1 改为 px-1 py-0.5。
调整边框:
将 border 改为 border-t border-b,以减少水平方向的边框。
调整表格整体宽度:
保持 w-full,但可以根据需要调整为固定宽度或百分比宽度。

mt-2: 设置上外边距(margin-top)为 0.5rem(即 8px)。这是为了在该 div 的上方添加一些间距。
flex: 使用 Flexbox 布局,使得子元素可以按照 Flexbox 规则进行排列。
justify-between: 在主轴(默认为水平轴)上将子元素均匀分布,第一个子元素在起始位置,最后一个子元素在结束位置。
items-center: 在交叉轴(默认为垂直轴)上将子元素居中对齐。

综合起来,这段代码的作用是创建一个具有 Flexbox 布局的 div,其中子元素会在水平方向上均匀分布,并且在垂直方向上居中对齐。这个 div 还会在其上方添加一些间距。

container mx-auto p-4 是 Tailwind CSS 类,container 类会自动设置最大宽度,并使其居中,mx-auto 使容器水平居中,p-4 添加内边距。

为了清晰地展示页面的边界,你可以通过多种方式来实现,包括添加边框、背景颜色、阴影效果等。以下是几种常见的方法:
1. 添加边框
你可以在父容器上添加边框,以便更清楚地看到其边界。例如:

从你提供的 RootLayout 组件来看,page.tsx 不是最顶层的组件。RootLayout 是 Next.js 应用程序的根布局组件,它包裹了所有的页面组件(包括 page.tsx)。以下是详细的解释:
1. 根布局组件 (RootLayout)
RootLayout 是 Next.js 应用程序的根布局组件,定义在 app/layout.tsx 或类似的文件中。它负责定义整个应用程序的基本结构和样式。

RootLayout: 根布局组件,包裹所有页面组件。
page.tsx: 具体的页面组件,代表一个具体的页面。
因此,page.tsx 不是最顶层的组件,而是被 RootLayout 包裹的一个页面组件。
4. 确保页面占满整个视口
为了确保 page.tsx 占满整个视口,你需要确保 RootLayout 和 page.tsx 的样式设置正确。以下是具体的步骤:
4.1 设置 RootLayout 的样式
确保 RootLayout 的 body 标签高度为 100%。

? 表示这个属性是可选的。也就是说,使用该类型的对象时,onRowClick 不一定是必需的。如果父组件没有提供 onRowClick 回调函数,那么它将不会被触发。

  • 有 onRowClick 的情况:如果父组件传递了 onRowClick 函数,那么当用户点击某一行时,该函数将被调用。
  • 没有 onRowClick 的情况:如果父组件没有传递 onRowClick 函数,那么点击行时不会触发任何回调。

3. (rowId: number | string) => void 回调函数签名

这部分定义了 onRowClick 回调函数的参数和返回值类型:

  • 参数 rowId:回调函数接受一个参数 rowId,表示被点击行的唯一标识符。rowId 的类型可以是 numberstring,这意味着它可以是一个数字或字符串,具体取决于你如何标识每一行。

    • number:如果你使用数字作为行的唯一标识符(例如,数据库中的自增 ID),那么 rowId 将是一个数字。
    • string:如果你使用字符串作为行的唯一标识符(例如,UUID 或其他字符串格式的 ID),那么 rowId 将是一个字符串。
  • 返回值 void:回调函数不返回任何值。void 表示该函数的执行结果是空的,即它不会返回任何数据。

回调函数定义

通过将 onRowClick 定义为回调函数,你可以实现父子组件的解耦。这意味着子组件(例如 TableComponent)不需要知道父组件(例如 App)的具体实现细节,它只需要负责触发事件,而具体的业务逻辑由父组件来处理。

  • 子组件的责任TableComponent 只负责渲染表格,并在用户点击某一行时调用传递给它的 onRowClick 回调函数。
  • 父组件的责任App 组件可以根据业务需求定义 onRowClick 的具体行为,例如导航到详情页面、显示模态框、更新状态等。

这种方式使得代码更加模块化和可维护,因为每个组件只关心自己的职责,而不依赖于其他组件的内部实现。

使用回调函数可以让你根据不同的场景灵活地定义不同的行为。假设你有多个地方使用了 TableComponent,但每次点击行时的行为不同:

  • 在一个页面上,点击行可能需要导航到该行的详细信息页面。
  • 在另一个页面上,点击行可能需要弹出一个编辑表单。
  • 在第三个页面上,点击行可能只是简单地高亮该行。

通过将 onRowClick 定义为回调函数,你可以在不同的地方传递不同的实现,而不需要修改 TableComponent 的代码。这大大提高了组件的复用性和灵活性。

回调函数 是一种编程模式,其中一个函数作为参数传递给另一个函数,并在适当的时机被调用。通过这种方式,父组件可以定义具体的业务逻辑,而子组件只需要负责触发事件并调用回调函数。

1. 将函数作为参数传递

是的,回调函数的核心思想就是将函数作为参数传递。JavaScript 中的函数是一等公民(first-class citizens),这意味着你可以像传递其他类型的值(如数字、字符串)一样传递函数。你可以将函数作为参数传递给另一个函数,并在适当的时候调用它。

2. 父组件实现,子组件调用

在 React 中,父组件可以通过 props 将回调函数传递给子组件。子组件可以在特定事件发生时(例如用户点击某一行),调用这个回调函数并将相关数据(如 rowId)作为参数传递回去。父组件可以根据传回的数据执行相应的业务逻辑。

在 React 中,数据流是单向的,即父组件通过 props 向子组件传递数据,而子组件不能直接修改父组件的状态。但是,子组件可以通过回调函数将事件或数据传递回父组件,从而让父组件根据这些信息更新自己的状态。

  1. 子组件触发事件:用户点击表格中的一行,触发 onClick 事件。
  2. 子组件调用回调函数onClick 事件处理器调用父组件传递的 onRowClick 回调函数,并将 row.id 作为参数传递给它。
  3. 父组件更新状态:父组件中的 handleRowClick 回调函数被调用,接收 row.id 作为参数,并更新父组件的状态(例如,设置 isModalOpen 为 true,并保存 selectedRowId)。
  4. 父组件重新渲染:由于父组件的状态发生了变化,React 会重新渲染父组件及其子组件。此时,弹窗会根据 isModalOpen 的值显示出来,并显示选中的行 ID。

关键点:子组件无法直接修改父组件的状态

你提到“子组件显然是无法修改父组件里的数据的”,这是正确的。在 React 中,子组件确实不能直接修改父组件的状态。但是,通过回调函数,子组件可以将事件或数据传递给父组件,父组件可以根据这些信息更新自己的状态。这就是为什么我们说 React 的数据流是单向的,但仍然可以通过回调函数实现从子组件到父组件的通信。

在 JavaScript 中,函数调用确实会形成一个调用栈,但 React 的事件处理机制并不是基于递归调用栈的工作方式。相反,React 使用的是合成事件系统,它会将事件处理程序绑定到最外层的 DOM 节点上,并通过事件冒泡机制将事件传递给相应的组件。

具体来说,当用户点击表格中的一行时:

  • 事件首先被捕获并传递给最外层的 DOM 节点(例如,document 或 body)。
  • 然后,React 会根据事件的目标元素(即被点击的行),找到对应的 React 组件(即 TableComponent)。
  • 最后,React 会调用该组件的事件处理程序(即 onClick),并执行回调函数。

因此,虽然子组件不能直接修改父组件的状态,但它可以通过回调函数将事件或数据传递给父组件,父组件再根据这些信息更新自己的状态。这种设计确保了数据流的单向性,同时保持了组件之间的解耦和灵活性。

总结

  • 父组件管理状态:父组件负责维护是否弹出弹窗的状态,并提供回调函数来更新这个状态。
  • 子组件触发回调函数:子组件在用户点击某一行时调用父组件传递的回调函数,并将行 ID 作为参数传递给父组件。
  • 父组件更新状态:父组件根据传回的行 ID 更新自己的状态(例如,显示弹窗)。
  • 单向数据流:子组件不能直接修改父组件的状态,但可以通过回调函数将事件或数据传递给父组件,由父组件决定如何处理。

 React.useMemo

在使用 React.useMemo 时,有两个主要参数:factory 函数 和 依赖数组(deps)。下面分别解释这两个概念以及你在代码中提到的 classes.map((cls) => 中的 cls: Class 的含义。

定义:factory 是一个函数,返回你想要缓存的值。
作用:当依赖数组中的值发生变化时,factory 函数会被重新执行,计算新的值;否则,会返回之前缓存的值。

依赖数组(deps)
定义:deps 是一个数组,包含所有在 factory 函数中使用的外部变量。
作用:当数组中的任何一个变量发生变化时,factory 函数会被重新执行;否则,useMemo 返回缓存的值。

定义:classes.map((cls) => { ... }) 是对 classes 数组中的每个元素进行遍历,并对每个元素执行提供的回调函数。
cls: Class:
cls 是 classes 数组中的每一个元素。
Class 是 TypeScript 中的类型注解,表示 cls 的类型是 Class。
这个类型注解是由你的 IDE(如 IntelliJ IDEA)自动推断出来的,基于 classes 数组的类型定义。

相关文章:

12.12【java exp4】react table全局搜索tailwindcss 布局 (Layout) css美化 3. (rowId: number

react table 创建一个下拉菜单&#xff0c;允许用户选择要搜索的列。创建一个输入框&#xff0c;用于输入搜索关键词。根据用户的选择&#xff0c;动态地应用过滤器到指定的列 全局搜索 import React from react; import { useTable, useFilters, useGlobalFilter, useSortBy…...

‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

‘pnpm’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 1.情况: npm -v 和 node -v的都正常就是 pnpm-v 无效 检查环境变量也没看出问题 2.分析 没有正确添加环境变量 3.解决 找到npm的全局安装目录 npm list -g --depth 0这里出现了npm的全局安装…...

频繁拿下定点,华玉高性能中间件迈入商业化新阶段

伴随着智能驾驶渗透率的快速增长&#xff0c;中国基础软件市场开始进入黄金窗口期。 近日&#xff0c;华玉通软&#xff08;下称“华玉”&#xff09;正式获得某国内头部轨道交通产业集团的智能化中间件平台定点项目。这将是华玉在基础软件领域深耕和商业化发展过程中的又一重…...

装饰者模式

代码详解&#xff1a;【设计模式】Java 设计模式之装饰者模式&#xff08;Decorator&#xff09;_java 装饰者模式-CSDN博客 // 抽象构件角色 public interface Component {void operation(); }// 具体构件角色 public class ConcreteComponent implements Component {Override…...

【河南新标】豫财预〔2024〕105号-《关于省级政务信息化建设项目支出预算标准的规定》-费用标准解读系列29

2024年12月3日&#xff0c;河南省财政厅发布了《关于省级政务信息化建设项目支出预算标准的规定》豫财预〔2024〕105号。《关于省级政务信息化建设项目支出预算标准的规定 &#xff08;试行&#xff09;》&#xff08;豫财预 〔2020〕81号&#xff09;同时废止。新的豫财预〔20…...

Android 蓝牙开发-传输数据

概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的&#xff0c;类似于socket通信&#xff0c;一台设备需要开放服务器套接字并处于listen状态&#xff0c;而另一台设备使用服务器的MAC地址发起连接。连接建立后&#xff0c;服务器和客户端就都通过对BluetoothSocket进行读写…...

使用VSCode Debugger 调试 React项目

一般我们调试代码时&#xff0c;用的最多的应该就是console.log方式了&#xff0c;还有的是使用Chrome DevTools 通过在对应的 sourcemap代码位置打断点进行调试&#xff0c;除了上面两种方式外还有一种更好用的调试方式&#xff1a; VSCode Debugger。 VSCode Debugger可以直…...

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…...

Flink SQL Cookbook on Zeppelin 部署使用

简介&#xff1a;对于初学者来说&#xff0c;学习 Flink 可能不是一件容易的事情。看文档是一种学习&#xff0c;更重要的是实践起来。但对于一个初学者来说要把一个 Flink SQL 跑起来还真不容易&#xff0c;要搭各种环境&#xff0c;真心累。很幸运的是&#xff0c;Flink 生态…...

用二进制方式向文件读写一组数据

【例10.4】从键盘输入10个学生的有关数据&#xff0c;然后把它们转存到磁盘文件上去。 #include<stdio.h> struct Student{char name[20];int number;int age; }; int main(){int i;struct Student stu;FILE *fp;fp fopen("1.txt","wb");if(fp N…...

WebChat——一个开源的聊天应用

Web Chat 是开源的聊天系统&#xff0c;支持一键免费部署私人Chat网页的应用程序。 开源地址&#xff1a;https://github.com/loks666/webchat 目录树 TOC ??? 开始使用 & 交流?? 开箱即用 [这里是代码001] 使用 Docker 部署[这里是代码002] 使用 Docker-compose …...

易语言 OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…...

12.19问答解析

概述 某中小型企业有四个部门&#xff0c;分别是市场部、行政部、研发部和工程部&#xff0c;请合理规划IP地址和VLAN&#xff0c;实现企业内部能够互联互通&#xff0c;同时要求市场部、行政部和工程部能够访问外网环境(要求使用OSPF协议)&#xff0c;研发部不能访问外网环境…...

重温设计模式--设计模式七大原则

文章目录 1、开闭原则&#xff08;Open - Closed Principle&#xff0c;OCP&#xff09;定义&#xff1a;示例&#xff1a;好处&#xff1a; 2、里氏替换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09;定义&#xff1a;示例&#xff1a;好处&#…...

【Python-中级】Python中的线程池:ThreadPoolExecutor

Python中的线程池:from concurrent.futures import ThreadPoolExecutor 在Python中,实现多线程编程的方法有很多,而ThreadPoolExecutor 是一个简单且高效的线程池工具。它提供了高层次的接口,用于并发地运行任务,同时隐藏了许多复杂的底层细节,非常适合日常的多线程任务…...

【终端工具】FinalShell v4.5.12 官方版

1.下载地址 【终端工具】FinalShell v4.5.12 官方版 2.简介 FinalShell是一款免费的跨平台远程管理工具&#xff0c;专为开发者和运维人员设计。它支持通过 SSH、SFTP 等方式连接到 Linux 和 Windows 服务器&#xff0c;提供类似于终端的操作界面。除了常规的远程登录功能&a…...

Windows11 家庭版安装配置 Docker

1. 安装WSL WSL 是什么&#xff1a; WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具&#xff0c;它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL&#xff1a; Docker 依赖 Linux 内核功能&#xff0c;WSL 2 提供了一个高性能、轻量级的…...

基于SSM(Spring + Spring MVC + MyBatis)框架构建一个图书馆仓储管理系统

基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架构建一个图书馆仓储管理系统是一个涉及多个功能模块的项目&#xff0c;包括但不限于图书管理、读者管理、借阅管理、归还管理等。 1. 环境准备 确保你已经安装了以下工具和环境&#xff1a; Java Developmen…...

《智驱新材合成:AI 点亮创新路径之光》

在科技浪潮汹涌澎湃的当下&#xff0c;新材料的探寻成为众多领域突破发展瓶颈的关键钥匙。而人工智能&#xff08;AI&#xff09;作为前沿科技的璀璨星辰&#xff0c;正以其独特的创新光芒照亮新材料合成路径的未知之境&#xff0c;引发了科研界与产业界的广泛关注与热议&#…...

【C++ 基础】命名空间

命名空间 命名空间 头文件:内有许多库函数&#xff08;相当于书柜&#xff09;&#xff0c;对库函数进行管理 命名空间:内有许多函数&#xff08;相当于书柜的一个分区&#xff09;&#xff0c;对函数进行管理 语法格式 namespace 命名空间标识符{...命名空间成员}//花括号…...

120页PPT讲解ChatGPT如何与财务数字化转型的业财融合

此方案主要聚焦于利用ChatGPT技术与数字化转型推动业财融合&#xff0c;实现企业的价值最大化。首先&#xff0c;通过ChatGPT技术&#xff0c;企业可以构建生成式对话机器人&#xff0c;自动回答常见问题&#xff0c;减轻人工客服的压力&#xff0c;提高响应速度。这种机器人具…...

新闻网站的安全性:保护信息与用户隐私

2.1vue技术 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…...

Flutter动画学习二

如何在 Flutter 中使用自定义动画和剪裁&#xff08;clipping&#xff09;实现一个简单的动画效果。 前置知识点学习 AnimationController AnimationController 是 Flutter 动画框架中的一个核心类&#xff0c;用于控制动画的生命周期和状态。它提供了一种灵活的方式来定义动…...

flutter教程01 flutter项目的目录结构

Flutter开发基础 Dart语言&#xff1a; Flutter使用Dart语言进行开发。你需要熟悉Dart的基本语法和特性&#xff0c;如变量、数据类型、函数、类、继承、接口等。 Flutter组件&#xff1a; Flutter提供了丰富的UI组件库&#xff0c;你可以使用这些组件来构建你的用户界面。了…...

微软在AI时代的战略布局和挑战

微软的CEO萨提亚纳德拉&#xff08;Satya Nadella&#xff09;在与投资人比尔格里&#xff08;Bill Gurley&#xff09;和布拉德格斯特纳&#xff08;Brad Gerstner&#xff09;的一场深度对话中&#xff0c;详细回顾了微软在AI时代的战略布局与所面临的挑战。这场对话不仅总结…...

QT:程序异常结束原因

在确定DLL库没有问题的情况下&#xff0c;大概率是因为以下两点问题导致程序异常结束。 1、程序中存在对象只声明&#xff0c;未创建就使用的情况。程序中只声明了一个对象QObject * object&#xff0c;未进行object new QObject就直接使用object。这样&#xff0c;程序编译构…...

Linux搭建TRELLIS详细流程

TRELLIS是最新的3D生成模型,官网地址如下: https://github.com/microsoft/TRELLIS 下面是详细的搭建流程。 由于是在Ubuntu系统上搭建的,下面操作仅限Ubuntu系统查看。 不过Windows系统大同小异,而且青龙大佬已经做了相关整理。 Windows系统的可以去看青龙大佬的b站视…...

红米Note 9 Pro5G刷小米官方系统

前言 刷机有2种方式&#xff1a;线刷 和 卡刷。 线刷 线刷&#xff1a;需要用电脑刷机工具&#xff0c;例如&#xff1a;XiaoMiFlash.exe&#xff0c;通过电脑和数据线对设备进行刷机。 适用场景&#xff1a; 系统损坏无法开机。恢复官方出厂固件。刷机失败导致软砖、硬砖的…...

仓颉编程语言功能剖析:从设计理念到实际应用

引言 随着编程语言的发展&#xff0c;越来越多新兴语言试图解决传统编程语言的痛点&#xff0c;其中华为推出的仓颉编程语言&#xff08;以下简称"仓颉"&#xff09;以其创新的理念和功能备受瞩目。仓颉以高效、易用、智能为核心设计目标&#xff0c;专注于提升开发…...

JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介

1. 基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化&#xff01; 动态 web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人看的数据始终会发生变化&#xf…...

五十一:HPACK如何减少HTTP头部的大小?

在现代的Web通信中&#xff0c;HTTP是最常用的协议。然而&#xff0c;随着网络应用程序的复杂化&#xff0c;HTTP头部的大小迅速增加&#xff0c;尤其是在HTTP/2中&#xff0c;由于其多路复用特性&#xff0c;多个请求和响应共享同一个连接&#xff0c;头部大小对性能的影响变得…...

windows11家庭版安装docker无法识别基于wsl2的Ubuntu

软件环境&#xff1a;windows11家庭版安装WSL2,Ubuntu22.04&#xff0c;docker4.34.2 问题描述&#xff1a;安装docker时&#xff0c;设置阶段无法识别Ubuntu22.04. 原因&#xff1a;windows11家庭版本默认没有Hyper-V 解决方案&#xff1a;将下述代码保存在新建记事本中&am…...

利用Spring Cloud Gateway Predicate优化微服务路由策略

利用Spring Cloud Gateway Predicate优化微服务路由策略 一、Predicate简介 Spring Cloud Gateway 是 Spring 生态系统中用于构建 API 网关的框架&#xff0c;它基于 Project Reactor 和 Netty 构建&#xff0c;旨在提供一种高效且灵活的方式来处理 HTTP 请求和响应。 Spring …...

谷歌浏览器的网络安全检测工具介绍

作为全球最受欢迎的浏览器之一&#xff0c;谷歌浏览器不仅提供了快速、便捷的浏览体验&#xff0c;还内置了一系列强大的网络安全检测工具&#xff0c;帮助用户识别潜在的网络威胁&#xff0c;保护个人隐私和数据安全。本文将详细介绍谷歌浏览器中的几项关键网络安全检测功能&a…...

Debian系统宝塔面板安装LiteSpeed Memcached(LSMCD)

参考链接 1. 官网指引&#xff1a; https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation 2. 安装OpenLiteSpeed官方LSMCD对象缓存替换Memcached详细图文教程 - 搬主题 实操记录&#xff1a; 首先LSMCD 默认的端口是11211&#xff0c;…...

termux下ubuntu换arm清华源

原官方源 deb http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiversedeb http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiversedeb http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted un…...

计算机网络——练习题

一. 单选题&#xff08;共27题&#xff0c;67.5分&#xff09; 1. (单选题)计算机网络的最突出的优点是____。 A. 运算速度快 B. 运算精度高 C. 存储容量大 D. 资源共享 我的答案: D:资源共享;正确答案: D:资源共享; 2.5分 答案解析&#xff1a; 2. (单选题)TCP/IP协…...

单机游戏《野狗子》游戏运行时提示dbghelp.dll缺失是什么原因?dbghelp.dll缺失要怎么解决?

《野狗子》游戏运行时提示dbghelp.dll缺失&#xff1a;原因与解决方案 在畅游《野狗子》这款引人入胜的游戏世界时&#xff0c;突然遭遇“dbghelp.dll缺失”的错误提示&#xff0c;无疑会给玩家的探险之旅蒙上一层阴影。作为一名深耕软件开发领域的从业者&#xff0c;我深知此…...

飞搭系列 | 条件动态控制,打造个性化数字体验

前言 汉得飞搭aPaaS低代码平台&#xff08;FEIDA&#xff0c;以下简称“飞搭”&#xff09;是基于低代码理念打造的融合 aPaaS 平台&#xff0c;助力企业快速搭建业务应用。作为 HZERO 生态的重要组成部分&#xff0c;致力于充分融合 HZERO 的各平台能力&#xff0c;提供企业用…...

ssr实现方案

目录 序言 一、流程 二、前端要做的事情 三、节点介绍 四、总结 序言 本文不是详细的实现过程&#xff0c;是让你最快最直接的理解ssr的真正实现方法&#xff0c;有前端经验的同学&#xff0c;能够很好的理解过程&#xff0c;细节根据具体项目实现 一、前端要做的事情 1.…...

STM32高级物联网通信之以太网通讯

目录 以太网通讯基础知识 什么是以太网 互联网和以太网的区别 1)概念与范围 (1)互联网 (2)以太网 2)技术特点 (1)互联网 (2)以太网 3)应用场景 (1)互联网 (2)以太网 以太网的层次 1)物理层 2)数据链路层 OSI 7层模型 TCPIP 4层模型 一些常见…...

以太网帧、IP数据报图解

注&#xff1a;本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式&#xff08;包含相关例题讲解&#xff09; jueyuanfengsheng2023-08-07 11:49 一、基础知识 UDP 段、IP 数据包&#xff0c;以太网帧图示 通信过程中&#xff…...

外包干了两年,技术退步明显...

先说一下自己的情况&#xff0c;普通本科&#xff0c;曾在外包干了2年多的功能测试&#xff0c;再加上大环境不好&#xff0c;那时我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;所以当时我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境…...

AI可信论坛亮点:合合信息分享视觉内容安全技术前沿

前言 在当今科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活与工作方式。作为AI领域的重要盛会&#xff0c;CSIG青年科学家会议AI可信论坛汇聚了众多青年科学家与业界精英&#xff0c;共同探讨AI技术的最新进展、挑…...

vue中proxy代理配置(测试一)

接口地址&#xff1a;http://jsonplaceholder.typicode.com/posts 1、配置一&#xff08;代理没起作用&#xff09; &#xff08;1&#xff09;设置baseURL为http://jsonplaceholder.typicode.com &#xff08;2&#xff09;proxy为 ‘/api’&#xff1a;’ ’ &#xff08;3&a…...

通用人工智能的关键:统一语言描述万物

当今世界&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度推进着人类社会的进步。从最初的简单计算到如今能够执行复杂任务的智能系统&#xff0c;AI 的每一次飞跃都伴随着理解世界能力的显著提升。然而&#xff0c;要实现真正的通用人工智能——即能够像人类…...

使用QML实现播放器进度条效果

使用QML实现播放进度效果 QML Slider介绍 直接上DEMO如下&#xff1a; Slider {width: 300;height: 20;orientation: Qt.Vertical; //决定slider是横还是竖 默认是HorizontalstepSize: 0.1;value: 0.2;tickmarksEnabled: true; //显示刻度}效果图如下 那么我先改变滑块跟滚轮…...

TowardsDataScience 博客中文翻译 2018~2024(一百二十三)

TowardsDataScience 博客中文翻译 2018~2024&#xff08;一百二十三&#xff09; 引言 从 2018 年到 2024 年&#xff0c;数据科学的进展超越了许多技术领域的速度。Towards Data Science 博客依然是这个领域的关键平台&#xff0c;记录了从基础工具到前沿技术的多方面发展。…...

14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误“

出现这个错误是因为使用的 CentOS 7 仓库已经被归档&#xff0c;当前的镜像地址无法找到所需的文件。CentOS 7 的官方支持已经结束&#xff0c;部分仓库已被移至归档库。这导致了你的 yum 命令无法找到所需的元数据文件。CentOS 7 的官方仓库在 2024 年 6 月 30 日之后已经停止…...

将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中 (如 Serilog)

将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中&#xff0c;可以使用第三方日志库&#xff08;如 Serilog&#xff09;来实现。Serilog 是一个流行的日志库&#xff0c;支持将日志输出到文件、控制台、数据库等多种目标。 以下是实现步骤&#xff1a; 1. 安装 Serilog 相…...