React 基础核心概念(8 个)——从入门到能写业务组件(上)| 葡萄城技术团队

React 基础核心概念(8 个)——从入门到能写业务组件(上)

前言:为什么要先掌握这些基础概念?

对国内开发者来说,React 是开发中后台系统、电商前端、移动端 H5 的“刚需技能”。但很多人刚学就陷入“会写 JSX 却不懂原理”的困境——比如不知道为什么状态更新后页面不刷新,或者写组件时反复遇到“属性透传”的麻烦。

这篇整理的 8 个基础概念,是 React 开发的“地基”:从 JSX 语法到最常用的 Hooks,每个都配了国内项目常见的示例(比如商品列表渲染、用户登录状态管理),帮你跳过“照抄代码却不懂逻辑”的坑,真正能独立写业务组件。

1. 什么是 React 中的 JSX?搞懂 React 专属语法

定义与作用

JSX(JavaScript XML)是 React 的“模板语法”,允许你在 JS 代码里写类似 HTML 的结构。很多初学者以为它是“HTML 的变体”,其实它最终会被 Babel 编译成React.createElement()函数,生成 React 元素(虚拟 DOM 节点)。

国内开发场景中,JSX 是写组件的“标配”——无论是电商的商品卡片,还是后台的表格组件,都靠 JSX 描述 UI 结构。

国内项目示例:电商商品卡片(JSX 实战)

import React from 'react';
// 引入国内常用的UI组件库(如Ant Design)
import { Card, Button, Tag } from 'antd';// 商品卡片组件:接收商品数据作为props
const ProductCard = ({ product }) =&gt; {const { id, name, price, stock, isDiscount } = product;return (// JSX支持嵌入JS表达式(用{}包裹)<card key="{id}" title="{name}" cover="{<img" src="{`/images/products/${id}.jpg`}" alt="{name}" />}style={{ width: 240, margin: '16px' }} // 行内样式需用对象(驼峰命名)&gt;{/* 条件渲染标签:有折扣显示“限时折扣” */}{isDiscount &amp;&amp; <tag color="red">限时折扣</tag>}<div style="{{" margintop: 8 }}><span style="{{" color: '#f40', fontsize: 16 }}>¥{price.toFixed(2)}</span><span style="{{" marginleft: 8, color: '#999' }}>库存:{stock}件</span></div>{/* 事件绑定:点击按钮添加购物车(后续会讲事件处理) */}<button type="primary" danger style="{{" width: '100%', margintop: 12 }} onclick="{()" => console.log(`添加商品 ${name} 到购物车`)}&gt;加入购物车</button>);
};// 使用组件:传入国内电商常见的商品数据
const ProductList = () =&gt; {const products = [{ id: 1, name: '华为Mate 60 Pro', price: 6999, stock: 120, isDiscount: false },{ id: 2, name: '小米14', price: 4999, stock: 86, isDiscount: true },];return (<div style="{{" display: 'flex', flexwrap: 'wrap' }}>{products.map(product =&gt; <productcard product="{product}" />)}</div>);
};export default ProductList;

注意点(国内开发者常踩的坑)

  • 不能直接写class:需用className(因为class是 JS 关键字);
  • 自闭合标签必须写/:比如<img src="">,不像 HTML 里可以省略;
  • 只能有一个根节点:如果有多个元素,需用<div><react.fragment>(简写&lt;&gt;)包裹。

2. React 中的 State 与 Props:组件的“数据传递与状态管理”核心

定义与区别

  • Props(属性):父组件传给子组件的数据,类似“函数参数”,只读不可改(子组件不能直接修改 props);
  • State(状态):组件内部管理的“动态数据”(如输入框内容、弹窗显示/隐藏),可修改但需用 setter 方法(如setCount),修改后会触发组件重新渲染。

国内开发中,这两者是“父子组件通信”和“组件内部状态控制”的核心——比如后台管理系统中,父组件传“表格数据”给子表格组件(用 props),子组件内部管理“分页页码”(用 state)。

国内项目示例:后台表格组件(State 与 Props 结合)

import React, { useState } from 'react';
import { Table, Pagination } from 'antd';// 子组件:表格(接收父组件传的props)
const DataTable = ({ tableData, columns }) =&gt; {// 子组件内部状态:当前页码(只能自己修改)const [currentPage, setCurrentPage] = useState(1);// 每页条数(国内后台常用10/20/50条)const pageSize = 10;// 处理页码变化(子组件内部更新state)const handlePageChange = (page) =&gt; {setCurrentPage(page);};// 分页逻辑:截取当前页数据const currentData = tableData.slice((currentPage - 1) * pageSize,currentPage * pageSize);return (<div>{/* 表格:用props传的columns和处理后的currentData */}<table columns="{columns}" dataSource="{currentData}" rowKey="id" pagination="{false}" 关闭表格自带分页,用自定义分页></table>{/* 分页组件:状态currentPage控制显示 */}<pagination current="{currentPage}" pageSize="{pageSize}" total="{tableData.length}" onChange="{handlePageChange}" style="{{" marginTop: 16, textAlign: 'right' }} /></div>);
};// 父组件:使用表格(传props给子组件)
const UserManagePage = () =&gt; {// 父组件数据:用户列表(模拟接口返回的国内后台数据)const userColumns = [{ title: '用户ID', dataIndex: 'id', key: 'id' },{ title: '用户名', dataIndex: 'username', key: 'username' },{ title: '角色', dataIndex: 'role', key: 'role' },{ title: '状态', dataIndex: 'status', key: 'status', render: (status) =&gt; status ? '启用' : '禁用' },];const userData = [{ id: 1, username: 'zhangsan', role: '管理员', status: true },{ id: 2, username: 'lisi', role: '普通用户', status: true },// ... 更多数据];// 父组件传给子组件的props:tableData和columnsreturn <datatable tableData="{userData}" columns="{userColumns}" />;
};export default UserManagePage;

3. React 事件处理:和原生 JS 有啥不一样?

核心特点

React 的“合成事件”(SyntheticEvent)是对原生 DOM 事件的封装,目的是解决“跨浏览器兼容”问题——国内开发者不用再写addEventListener兼容 IE,直接用onClick这类驼峰命名的事件即可。

另外,React 事件处理有两个关键点:

  • 事件处理函数需要“正确绑定 this”(类组件中常见,函数组件用箭头函数可避免);
  • 传参时需用“函数包裹”(如onClick={() =&gt; handleDelete(id)}),避免直接执行函数。

国内项目示例:表单提交与按钮点击(高频场景)

import React, { useState } from 'react';
import { Form, Input, Button, message } from 'antd';const LoginForm = () =&gt; {const [loading, setLoading] = useState(false); // 登录加载状态// 1. 表单提交事件(带参数,需用箭头函数包裹)const handleSubmit = async (values) =&gt; {setLoading(true); // 点击提交后显示加载状态try {// 模拟国内接口请求(如调用后端登录接口)const res = await fetch('/api/login', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(values),});const data = await res.json();if (data.success) {message.success('登录成功!');// 跳转到首页(国内常用react-router)// navigate('/home');} else {message.error(data.message || '登录失败');}} catch (error) {message.error('网络错误,请重试');} finally {setLoading(false); // 无论成功失败,关闭加载状态}};// 2. 普通按钮点击事件(无参数)const handleReset = () =&gt; {// 重置表单(Ant Design Form方法)Form.useForm()[0].resetFields();};return (<form name="login_form" layout="vertical" onFinish="{handleSubmit}" 表单提交事件(React合成事件) style="{{" width: 350, margin: '0 auto' }}><form.item name="username" label="用户名" rules="{[{" required: true, message: '请输入用户名' }]}><input placeholder="请输入用户名"></form.item><form.item name="password" label="密码" rules="{[{" required: true, message: '请输入密码' }]}><input.password placeholder="请输入密码" /></form.item><form.item><button type="primary" htmltype="submit" loading="{loading}" style="{{" marginright: 8 }}>登录</button><button onclick="{handleReset}">重置</button></form.item></form>);
};export default LoginForm;

4. React 条件渲染:怎么优雅地控制 UI 显示?

核心场景

国内开发中,条件渲染几乎无处不在:用户登录/未登录显示不同按钮、接口请求中显示“加载中”、数据为空显示“暂无数据”……React 没有专门的“条件渲染语法”,而是用 JS 的逻辑(如if-else、三元运算符、&&)实现。

国内项目示例:多场景条件渲染(覆盖高频需求)

import React, { useState, useEffect } from 'react';
import { Spin, Empty, List, Avatar } from 'antd';const MessageList = () =&gt; {// 状态:加载中、消息数据、是否登录const [loading, setLoading] = useState(true);const [messages, setMessages] = useState([]);const [isLogin, setIsLogin] = useState(false);// 模拟接口请求(国内后台常见的“消息列表”接口)useEffect(() =&gt; {const fetchMessages = async () =&gt; {try {const res = await fetch('/api/messages');const data = await res.json();setMessages(data.list);setIsLogin(data.isLogin); // 接口返回登录状态} catch (error) {console.error('获取消息失败:', error);} finally {setLoading(false);}};fetchMessages();}, []);// 1. 加载中:显示Spin组件(国内常用加载组件)if (loading) {return <spin size="large" style="{{" display: 'block', margin: '40px auto' }} />;}// 2. 未登录:显示“请登录”提示(三元运算符)if (!isLogin) {return (<div style="{{" textalign: 'center', padding: 40 }}><h3>请先登录查看消息</h3><button type="primary" onclick="{()" => setIsLogin(true)}&gt;立即登录</button></div>);}return (<div style="{{" width: 300, margin: '0 auto' }}><h3>我的消息</h3>{/* 3. 有消息:渲染列表(&amp;&amp; 语法) */}{messages.length &gt; 0 ? (<list datasource="{messages}" renderitem="{(item)" => (<list.item><list.item.meta avatar="{<Avatar">{item.sender[0]}}title={item.sender}description={item.content}/&gt;<span style="{{" color: '#999' }}>{item.time}</span></list.item.meta></list.item>)}/&gt;) : (// 4. 无消息:显示Empty组件(国内常用空状态组件)<empty description="暂无消息" />)}</list></div>);
};export default MessageList;

5. React Context API:解决“属性透传”的痛点

什么是属性透传?

当组件层级很深时(比如“App→Layout→Sidebar→Menu→MenuItem”),如果要把“主题色”从 App 传给 MenuItem,需要每层组件都传 props——这就是“属性透传”,国内开发者常称之为“props drilling”,代码冗余且难维护。

Context API 的作用就是“跨层级传递数据”,不用手动一层层传 props,适合传递“全局数据”(如主题、用户信息、语言设置)。

国内项目示例:后台系统主题切换(Context 实战)

import React, { createContext, useContext, useState } from 'react';
import { Button, Divider, Typography } from 'antd';// 1. 创建Context(主题上下文)
const ThemeContext = createContext();// 2. 创建Provider(提供主题数据和修改方法)
export const ThemeProvider = ({ children }) =&gt; {// 主题状态:light(默认)/dark(暗黑模式)const [theme, setTheme] = useState('light');// 切换主题的方法const toggleTheme = () =&gt; {setTheme(prev =&gt; prev === 'light' ? 'dark' : 'light');};// 主题样式(根据主题切换)const themeStyles = {light: { background: '#fff', color: '#333' },dark: { background: '#141414', color: '#fff' },};// 提供上下文数据(children是子组件树)return (<themecontext.provider value="{{" theme, toggletheme, themestyles }}><div style="{themeStyles[theme]}" classname="{`theme-${theme}`}">{children}</div></themecontext.provider>);
};// 3. 自定义Hook(简化使用Context,避免重复useContext)
const useTheme = () =&gt; useContext(ThemeContext);// 4. 子组件:主题切换按钮(直接用useTheme获取全局主题)
const ThemeToggleButton = () =&gt; {const { theme, toggleTheme } = useTheme();return (<button onclick="{toggleTheme}" type="primary">当前主题:{theme === 'light' ? '浅色' : '暗黑'} → 切换</button>);
};// 5. 深层子组件:页面内容(直接用主题样式)
const PageContent = () =&gt; {const { themeStyles } = useTheme();return (<div style="{{" padding: 24, minheight: 300 }}><typography.title level="{2}">后台管理首页</typography.title><typography.paragraph style="{themeStyles}">这是使用Context API实现的主题切换功能,所有组件都能直接获取主题数据,无需属性透传。</typography.paragraph></div>);
};// 6. 根组件:使用Provider包裹
const App = () =&gt; {return (<themeprovider><div style="{{" minheight: '100vh' }}><themetogglebutton /><divider /><pagecontent /></div></themeprovider>);
};export default App;

6. 如何正确使用 useState?React 状态管理的“入门 Hook”

核心作用

useState是 React 最基础的 Hook,用于在函数组件中“管理状态”(如计数器、表单输入、弹窗显示)。它返回一个“状态变量”和“修改状态的函数”(setter),修改状态后会触发组件重新渲染。

国内开发者常踩的坑:直接修改状态(如count = count + 1)不会触发渲染,必须用 setter 方法;如果状态是“引用类型”(对象/数组),需要传“新的引用”(如setUser({ ...user, name: '新名字' }))。

国内项目示例:两种常见 useState 场景(基础+引用类型)

import React, { useState } from 'react';
import { Input, Button, Card, Space } from 'antd';// 场景1:基础类型状态(数字/字符串)——计数器
const Counter = () =&gt; {// 初始化状态:count=0,setCount是修改方法const [count, setCount] = useState(0);// 正确修改状态:用setter方法(接收新值或函数)const increment = () =&gt; {// 方式1:直接传新值(简单场景)// setCount(count + 1);// 方式2:传函数(依赖前一个状态,更安全)setCount(prevCount =&gt; prevCount + 1);};const decrement = () =&gt; {setCount(prevCount =&gt; Math.max(0, prevCount - 1)); // 避免负数};return (<card title="计数器(基础状态)" style="{{" width: 300 }}><space size="middle"><button onclick="{decrement}">-</button><span style="{{" fontsize: 18 }}>{count}</span><button onclick="{increment}">+</button></space></card>);
};// 场景2:引用类型状态(对象)——用户信息表单
const UserForm = () =&gt; {// 初始化对象状态(国内表单常见的用户信息)const [user, setUser] = useState({name: '',phone: '',email: '',});// 正确修改对象状态:展开原对象,修改指定属性(生成新引用)const handleInputChange = (e) =&gt; {const { name, value } = e.target;setUser(prevUser =&gt; ({...prevUser, // 展开原对象,保留未修改的属性[name]: value, // 修改当前输入的属性}));};const handleSubmit = () =&gt; {console.log('提交用户信息:', user);// 调用接口提交数据...};return (<card title="用户信息表单(对象状态)" style="{{" width: 400, margintop: 16 }}><space direction="vertical" size="large" style="{{" width: '100%' }}><input name="name" 与user对象的属性名一致 placeholder="请输入姓名" value="{user.name}" onChange="{handleInputChange}"><input name="phone" placeholder="请输入手机号" value="{user.phone}" onChange="{handleInputChange}"><input name="email" placeholder="请输入邮箱" value="{user.email}" onChange="{handleInputChange}"><button type="primary" onclick="{handleSubmit}" style="{{" width: '100%' }}>提交</button></space></card>);
};// 组合使用两个组件
const UseStateDemo = () =&gt; {return (<div style="{{" padding: 24 }}><counter /><userform /></div>);
};export default UseStateDemo;

7. 精通 useEffect:React 副作用处理的“核心 Hook”

什么是副作用?

“副作用”是指组件中“不直接参与 UI 渲染”的操作,比如:

  • 调用接口请求数据(国内开发最常见);
  • 操作 DOM(如监听滚动事件);
  • 设置定时器/清除定时器。

useEffect的作用就是“管理副作用”,它能控制“副作用何时执行”(组件挂载后、状态更新后、组件卸载前),避免副作用影响组件渲染逻辑。

国内项目示例:接口请求+清理副作用(高频场景)

import React, { useState, useEffect } from 'react';
import { List, Spin, message, Button } from 'antd';const ArticleList = () =&gt; {const [articles, setArticles] = useState([]);const [loading, setLoading] = useState(true);const [page, setPage] = useState(1); // 页码状态// 副作用1:请求文章列表(依赖page,页码变时重新请求)useEffect(() =&gt; {// 定义异步请求函数(useEffect回调不能直接是async)const fetchArticles = async () =&gt; {setLoading(true);try {// 模拟国内博客平台接口(如掘金、CSDN文章列表)const res = await fetch(`/api/articles?page=${page}&amp;size=10`);const data = await res.json();if (data.success) {setArticles(data.list);} else {message.error('获取文章失败');}} catch (error) {message.error('网络错误,请重试');console.error('请求失败:', error);} finally {setLoading(false);}};fetchArticles(); // 执行请求}, [page]); // 依赖数组:只有page变化时,才重新执行副作用// 副作用2:监听窗口滚动(组件挂载时监听,卸载时清除)useEffect(() =&gt; {const handleScroll = () =&gt; {// 滚动到底部时加载下一页(国内列表常见的“无限滚动”前置逻辑)const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;const scrollHeight = document.documentElement.scrollHeight;const clientHeight = document.documentElement.clientHeight;if (scrollTop + clientHeight &gt;= scrollHeight - 100 &amp;&amp; !loading) {setPage(prevPage =&gt; prevPage + 1);}};// 绑定滚动事件(副作用)window.addEventListener('scroll', handleScroll);// 清理函数:组件卸载时执行,避免内存泄漏return () =&gt; {window.removeEventListener('scroll', handleScroll);};}, [loading]); // 依赖loading:加载中时不触发下一页return (<div style="{{" width: 800, margin: '0 auto', padding: 24 }}><h2>最新技术文章</h2>{loading &amp;&amp; page === 1 ? ( // 第一页加载时显示全屏加载<spin size="large" style="{{" display: 'block', margin: '40px auto' }} />) : (&lt;&gt;<list datasource="{articles}" renderitem="{(item)" => (<list.item key="read" actions="{[<a">阅读全文, <span key="view">{item.viewCount} 阅读</span>]}&gt;<list.item.meta title="{<a" href="{`/articles/${item.id}`}">{item.title}}description={<div><span>{item.author}</span> · <span>{item.publishTime}</span></div>}/&gt;</list.item.meta></list.item>)}/&gt;{/* 加载更多时显示底部加载 */}{loading &amp;&amp; page &gt; 1 &amp;&amp; <spin style="{{" display: 'block', margin: '20px auto' }} />})}</list></div>);
};export default ArticleList;

8. 用 useContext 避免属性透传:简化 Context 使用

核心作用

useContext是“使用 Context”的 Hook,它能让组件直接获取 Context 中的数据,不用再通过Context.Consumer嵌套(旧写法)。结合createContextProvider,就能彻底解决“属性透传”问题。

国内开发中,useContext常和useState配合使用——用useState管理全局状态(如用户信息),用Context传递状态和修改方法,让所有组件都能访问。

国内项目示例:全局用户状态管理(useContext+useState)

import React, { createContext, useContext, useState, useEffect } from 'react';
import { Button, Avatar, Dropdown, Menu } from 'antd';// 1. 创建用户Context
const UserContext = createContext();// 2. 创建用户Provider(管理全局用户状态)
export const UserProvider = ({ children }) =&gt; {const [user, setUser] = useState(null); // 用户信息(null表示未登录)// 模拟初始化:从localStorage获取登录状态(国内项目常用)useEffect(() =&gt; {const savedUser = localStorage.getItem('userInfo');if (savedUser) {setUser(JSON.parse(savedUser));}}, []);// 登录方法:模拟接口登录后保存用户信息const login = async (username, password) =&gt; {// 模拟登录接口const res = await fetch('/api/login', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ username, password }),});const data = await res.json();if (data.success) {setUser(data.user);// 保存到localStorage,刷新页面不丢失localStorage.setItem('userInfo', JSON.stringify(data.user));}return data;};// 退出方法:清除用户信息const logout = () =&gt; {setUser(null);localStorage.removeItem('userInfo');// 调用后端退出接口(如清除token)fetch('/api/logout', { method: 'POST' });};// 提供给子组件的数据和方法const userValue = {user,isLogin: !!user, // 是否登录(布尔值)login,logout,};return <usercontext.provider value="{userValue}">{children}</usercontext.provider>;
};// 3. 自定义Hook:简化useContext调用
const useUser = () =&gt; useContext(UserContext);// 4. 头部组件:显示用户信息或登录按钮(深层组件,无需透传)
const Header = () =&gt; {const { user, isLogin, login, logout } = useUser();// 未登录:显示登录按钮if (!isLogin) {const handleLogin = async () =&gt; {// 模拟输入用户名密码(实际项目用登录表单)const res = await login('admin', '123456');if (res.success) {console.log('登录成功');} else {console.error('登录失败:', res.message);}};return (<div style="{{" display: 'flex', justifycontent: 'flex-end', padding: 16 }}><button onclick="{handleLogin}" type="primary">登录</button></div>);}// 已登录:显示用户头像和下拉菜单const menu = (<menu items="{[" { key: 'profile', label: '个人中心' }, 'settings', '账号设置' 'logout', '退出登录', onClick: logout ]}></menu>);return (<div style="{{" display: 'flex', justifycontent: 'flex-end', padding: 16, alignitems: 'center' }}><span style="{{" marginright: 8 }}>欢迎,{user.nickname}</span><dropdown overlay="{menu}"><avatar src="{user.avatar" || ' images default-avatar.png'}>{user.nickname[0]}</avatar></dropdown></div>);
};// 5. 页面组件:使用用户信息(无需透传)
const Dashboard = () =&gt; {const { user } = useUser();return (<div style="{{" padding: 24 }}><h2>仪表盘</h2><p>当前登录用户:{user.username}</p><p>用户角色:{user.role}</p></div>);
};// 6. 根组件:用Provider包裹
const App = () =&gt; {return (<userprovider><header></header><dashboard /></userprovider>);
};export default App;

上篇小结

这 8 个基础概念是 React 开发的“敲门砖”:JSX 决定你能不能写 UI,State 和 Props 决定你能不能传数据,事件处理和条件渲染决定你能不能做交互,Context 和 useState/useEffect 则帮你解决“全局状态”和“副作用”的核心问题。

如果能熟练掌握这些概念,你已经能独立开发国内常见的业务组件(如表单、列表、卡片),下一篇我们会深入 React 进阶概念——从 DOM 操作到性能优化,帮你写出更高效、更易维护的 React 项目。</react.fragment>

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

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

相关文章

2 day - when

第二天嘿嘿 从今天开始应用一些方法 法一、链式时延协议(嘿嘿这个时延还有协议真的很容易让人联想到计网,很喜欢计网老师) 有两条任务链为主链和辅助链。启用时,可以启用辅助链,预约一个信号:摘下眼镜并给小号发…

玄武建设局网站网页设计方案

NoSQL数据库&#xff1a;数据的一致性 读取一致性 强一致性 在任何时间访问集群中任一结点&#xff0c;得到的数据结果一致&#xff1b; 用户一致性 对同一用户&#xff0c;访问集群期间得到的数据一致&#xff1b; 解决用户一致性&#xff1a;使用粘性会话&#xff0c;将会话…

可以将自己做的衣服展示的网站网站的流量建设

文章目录 0 前言1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径&#xff0c;图像尺寸&#xff0c;数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…

网站怎么更新数据重庆网架加工厂

华子目录 概念工作流程工作图流程&#xff08;按行处理&#xff09; awk程序执行方式1.通过命令行执行awk程序实例 2.awk命令调用脚本执行实例 3.直接使用awk脚本文件调用实例 awk命令的基本语法格式BEGIN模式与END模式实例awk的输出 记录和域&#xff08;记录表示数据行&#…

机械网站开发铁路局招聘正式工4000人

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

协会网站建设计划书工商局网站怎么做股东实名认证

1. 题目 给定一个整数序列&#xff1a;a1, a2, …, an&#xff0c;一个132模式的子序列 ai, aj, ak 被定义为&#xff1a;当 i < j < k 时&#xff0c;ai < ak < aj。 设计一个算法&#xff0c;当给定有 n 个数字的序列时&#xff0c;验证这个序列中是否含有132模…

网站主持人制作网站代言人asp 网站开发 软件

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

实用指南:轻松玩转Swagger API文档神器

实用指南:轻松玩转Swagger API文档神器pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

记录java调用eclipse cdt 解析c++文件

环境: jdk1.8 eclipse cdt 9.11.1 需求: java 解析c++中的类,属性类型,属性名称,函数,函数参数,返回值。 注意点: 如果你是外网编码,移植依赖和代码到内网的时候 运行可能出现 class not found xxxx , 这…

Chormium 密码管理器表单结构体说明(基于Chromium138)

这个结构体(struct PasswordForm)是 Chromium 浏览器(以及所有基于 Chromium 的浏览器,例如 Chrome、Edge 等)中密码管理器用来存储和管理单个登录凭证(即一组用户名和密码)的核心数据结构。它不仅包含了用户名…

为什么人工智能选择Python?深入解析AI界的胶水语言

在人工智能(AI)的黄金时代,Python几乎"统治"了整个领域。从深度学习到机器学习,从学术研究到工业应用,Python无处不在。 但为什么是Python?为什么不是性能更强的C++、生态成熟的Java,或者其他现代语言…

惠安网站建设报价网站开发工程师招聘要求

有很多网友在问&#xff1a;TPlink路由器端口映射怎么设置&#xff1f;因为不懂端口映射的原理&#xff0c;所以无从下手&#xff0c;下面小编就给大家分享TPlink云路由器界面端口映射设置方法&#xff0c;帮助大家快速入门TP路由器端口映射设置方法。 1.登录路由器管理界面&a…

咸宁网站设计windows 上wordpress

上一篇中 我们详细讲了内存溢出 内存泄漏 还有相关的案例。 这篇博客中我们主要了解一下GC调优。 有些新手可能会有一点 疑问—— 这两者不是一回事吗&#xff1f;&#xff1f; 其实说一回事 也没错 因为GC调优本质上还是针对 堆上的内存 只不过前面我们关注的侧重点在于 不合…

模版网站有源代码吗注册公司代理费用多少钱

【vs2019】window10环境变量设置 【先赞后看养成习惯】求关注点赞收藏&#x1f60a; 安装VS2019时建议默认安装地址&#xff0c;最好不要改动&#xff0c;不然容易出问题 以下是安装完VS2019后环境变量的设置情况&#xff0c;C:\Program Files (x86)\Microsoft Visual Studi…

1 day(20250925) - when

第一天,好像时间还可利用的地方很多,其实是效率和时长都有待提升。 哇要做的事情都蛮复杂和多的,其实没那么难对吧,不过太多了,想要迈大步就变得不可能实现,而且迈大步总感觉会错过一些细节,不能够有底气。但是…

12分钟讲解Python核心理念

https://segmentfault.com/a/1190000047277781 12分钟讲解Python核心理念 本内容是对 Every Python Concept Explained in 12 Minutes 内容的翻译与整理。 Python之禅(The zen of Python) 当你在Python解释器中输入i…

【重要】什么是 PEP 8 规范

PEP 8 是 Python 官方的代码风格指南,全称为 Python Enhancement Proposal 8(Python 增强提案 8),旨在通过统一编码规范提升代码的可读性、一致性和可维护性。以下是其核心内容与重要性: 一、PEP 8 的核心规范代码…

实用指南:华为坤灵:点燃中小企业智能化的星火

实用指南:华为坤灵:点燃中小企业智能化的星火pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

阻止HTML input元素(type=number)中输入字母e的方法

在HTML中,<input type=number> 元素允许用户输入一个数字,它可以包含正数、负数、整数、浮点数以及特殊字符,如 e表示科学计数法。然而,在某些情况下,你可能不希望允许用户输入字母 e。为了实现这一目标,可…