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

Nivo图表库全面指南:配置与用法详解

Nivo图表库全面指南:配置与用法详解

Nivo是React生态中一个基于D3.js构建的开源数据可视化组件库,以其精美的设计、流畅的动画效果和高度可定制性而受到开发者青睐。截至2025年10月,Nivo在GitHub上拥有超过11,000颗星 ,月下载量约30万 ,虽然不及Chart.js或Recharts等"通用型"库,但在需要高度定制化和设计优先的场景中,Nivo已成为事实上的主流选择 。

Nivo的核心优势在于它将D3.js的复杂性隐藏在易用的React组件API之后,同时提供多种渲染模式(SVG、Canvas、HTML)以适应不同性能需求 。它采用配置驱动的模式,通过props传递配置对象来定义图表行为和样式,使开发者能够轻松创建复杂而美观的数据可视化效果 。本文将详细介绍Nivo各类图表的配置和用法,帮助开发者快速掌握这一强大工具。

一、Nivo基本概念与安装

Nivo是一个模块化的React图表库,这意味着你只需安装实际需要的图表类型,避免了不必要的代码体积 。Nivo的安装过程简单直观,首先需要安装核心包@nivo/core,然后根据具体需求安装特定图表包。

# 安装核心包
npm install @nivo/core# 安装饼图组件
npm install @nivo/pie# 安装条形图组件
npm install @nivo/bar# 安装折线图组件
npm install @nivo/line

Nivo的组件命名通常遵循"Responsive[ChartType]"模式,如ResponsivePieResponsiveBarResponsiveLine,这些组件能够根据父容器的尺寸自动调整图表大小,非常适合响应式设计 。Nivo还支持服务端渲染(SSR),这对于SEO优化和首屏加载速度提升非常有帮助 。

二、核心图表类型详解

1. 饼图(Pie Chart)

饼图适用于展示部分与整体的关系,是Nivo中最常用的图表类型之一。以下是创建响应式饼图的基本配置:

import { ResponsivePie } from '@nivo/pie';const data = [{ id: 'iOS', label: 'iOS', value: 25.15 },{ id: 'Android', label: 'Android', value: 74.43 },{ id: '其他', label: '其他', value: 0.42 }
];const PieChartExample = () => (<div style={{ height: 400 }}><ResponsivePiedata={data}margin={{ top: 40, right: 80, bottom: 80, left: 80 }}innerRadius={0.5} // 设置为环形图padAngle={0.7}cornerRadius={3}colors={{ scheme: 'category10' }}borderWidth={1}borderColor={{from: 'color',modifiers: [['darker', 0.2]]}}radialLabelsSkipAngle={10}radialLabelsTextXOffset={6}radialLabelsTextColor="#333333"radialLabelsLinkOffset={0}radialLabelsLinkDiagonalLength={16}radialLabelsLinkHorizontalLength={24}radialLabelsLinkStrokeWidth={1}radialLabelsLinkColor={{from: 'color'}}slicesLabelsSkipAngle={10}slicesLabelsTextColor="#333333"legends={[ // 图例配置{anchor: 'bottom',direction: 'row',translateY: 56,itemWidth: 100,itemHeight: 18,itemTextColor: '#999',symbolSize: 18,symbolShape: 'circle',effects: [ // 悬停效果{on: 'hover',style: {itemTextColor: '#000',},},],},]}/></div>
);

关键配置项

  • data:数据源,必须是一个包含idlabelvalue字段的对象数组
  • margin:图表边距配置,定义图表与容器边框的距离
  • innerRadius:饼图内部半径,设置为0.5以上可创建环形图
  • padAngle:扇形区域间的间隙角度,值越大间隙越明显
  • colors:颜色方案配置,支持预设色板(如category10)或自定义颜色
  • borderColor:边框颜色配置,可通过frommodifiers定义基于主色的边框颜色
  • radialLabels:径向标签配置,控制饼图中心区域的标签显示
  • slicesLabels:扇形片标签配置,控制每个扇形区域的标签显示
  • legends:图例配置,定义图例的位置、样式和交互效果
2. 条形图(Bar Chart)

条形图适用于比较不同类别的数值大小,Nivo提供了丰富的配置选项来定制条形图的外观和行为:

import { ResponsiveBar } from '@nivo/bar';const data = [{country: '中国',value: 1409,year: '2024'},{country: '印度',value: 1339,year: '2024'},{country: '美国',value: 331,year: '2024'},{country: '印尼',value: 267,year: '2024'},{country: '巴基斯坦',value: 220,year: '2024'}
];const BarChartExample = () => (<div style={{ height: 400 }}><ResponsiveBardata={data}keys={['value']} // 要绘制的值字段indexBy="country" // 分类依据字段margin={{ top: 50, right: 130, bottom: 50, left: 60 }}padding={0.3} // 条形之间的间距valueScale={{ type: 'linear' }} // 值轴类型indexScale={{ type: 'band', round: true }} // 分类轴类型colors={{ scheme: 'nivo' }} // 使用Nivo默认色板border={{ color: '#白色', size: 1 }} // 条形边框配置axisTop={{tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '人口',legendPosition: 'middle',legendOffset: -36}}axisBottom={{tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '国家',legendPosition: 'middle',legendOffset: 32}}axisLeft={{tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '人口',legendPosition: 'middle',legendOffset: -40}}axisRight={null}enableGridX={false} // 是否启用X轴网格线enableGridY={true} // 是否启用Y轴网格线tooltip={(slice) => (<strong>{slice.id}: {slice.value} 亿</strong>)}legends={[ // 图例配置{anchor: 'bottom',direction: 'row',justify: false,translateX: 0,translateY: 56,itemsSpacing: 0,itemWidth: 90,itemHeight: 18,itemDirection: 'left-to-right',itemOpacity: 1,symbolSize: 15,symbolShape: 'circle'}]}fill={[ // 条形填充配置{match: { id: '中国' },id: 'dots' // 使用点图案填充},{match: { id: '印度' },id: 'lines' // 使用线图案填充}]}defs={揽入} // 定义图案和渐变{id: 'dots',type: 'patternDots',background: 'inherit',color: '#38bcb2',size: 4,padding: 1,stagger: true},{id: 'lines',type: 'patternLines',background: 'inherit',color: '#eed312',rotation: -45,石灰线: 6,spacing: 10}]/></div>
);

关键配置项

  • keys:要绘制的值字段数组,支持多值比较
  • indexBy:分类依据字段,用于定义X轴分类
  • padding:条形之间的间距比例
  • valueScaleindexScale:轴刻度类型配置
  • axisTopaxisBottomaxisLeftaxisRight:轴线配置,定义标签、网格线和样式
  • tooltip:自定义提示框内容,可返回任意React元素
  • fill:条形填充配置,支持图案( patterns)和渐变( gradients)
  • defs:定义图案和渐变的配置项
3. 折线图(Line Chart)

折线图适用于展示数据随时间变化的趋势,Nivo的折线图组件提供了丰富的交互和动画效果:

import { ResponsiveLine } from '@nivo/line';const data = [{id: '销售额',data: [{ x: '1月', y: 123 },{ x: '2月', y: 157 },{ x: '3月', y: 142 },{ x: '4月', y: 187 },{ x: '5月', y: 219 },{ x: '6月', y: 253 }]},{id: '利润',data: [{ x: '1月', y: 23 },{ x: '2月', y: 37 },{ x: '3月', y: 22 },{ x: '4月', y: 47 },{ x: '5月', y: 69 },{ x: '6月', y: 93 }]}
];const LineChartExample = () => (<div style={{ height: 400 }}><ResponsiveLinedata={data}margin={{ top: 50, right: 110, bottom: 50, left: 60 }}xScale={{ type: 'point' }} // X轴刻度类型yScale={{type: 'linear',min: 'auto',max: 'auto',stacked: false,reverse: false}}curve="catmullRom" // 折线曲线类型axisTop={null}axisBottom={{orient: 'bottom',tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '月份',legendPosition: 'middle',legendOffset: 32}}axisLeft={{orient: 'left',tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '金额',legendPosition: 'middle',legendOffset: -40}}axisRight={null}legends={[ // 图例配置{anchor: 'bottom-right',direction: 'column',justify: false,translateX: 100,translateY: 0,items体现: 2,itemWidth: 80,itemHeight: 20,itemDirection: 'left-to-right',itemOpacity: 1,symbolSize: 15,symbolShape: 'circle'}]}pointSize={10} // 数据点大小pointColor={{ from: 'color', modifiers: [['darker', 1.6]] }} // 数据点颜色pointBorderWidth={2} // 数据点边框宽度pointBorderColor={{ from: 'color' }} // 数据点边框颜色pointLabelYOffset={-12} // 数据点标签Y轴偏移enablePointLabel={true} // 是否启用数据点标签areaColor={{ from: 'color', modifiers: [['darker', 0.5]] }} // 面积填充颜色areaOpacity={0.3} // 面积填充透明度motionConfig="gentle" // 动画配置/></div>
);

关键配置项

  • xScaleyScale:轴刻度类型配置,支持线性、对数、时间等类型
  • curve:折线曲线类型,如catmullRommonotoneXline
  • areaColorareaOpacity:面积填充配置,创建区域图效果
  • pointSizepointColorpointBorderWidth:数据点样式配置
  • enablePointLabelpointLabelYOffset:数据点标签配置

三、高级配置选项

1. 动画效果配置

Nivo使用react-spring库来实现流畅的动画效果,通过简单的配置即可创建引人注目的过渡效果:

<ResponsivePiedata={data}animate={true} // 启用动画motionStiffness={90} // 动画物理参数,值越大动画越"硬"motionDamping={15} // 动画物理参数,值越大动画越快达到平衡motionConfig="gentle" // 使用预设动画配置enter�定={ // 自定义入场动画delay: 200,transition: { duration: 1000, ease: 'circleIn' }}}exit={ // 自定义出场动画transition: { duration: 500, ease: 'circleOut' }}}// 其他配置...
/>

动画配置关键点

  • animate:布尔值,控制是否启用动画
  • motionStiffnessmotionDamping:调整动画的物理特性,影响动画的流畅度和响应速度
  • motionConfig:预设动画配置,可选值包括gentlestiffspringgoenixwobbly
  • enterexit:自定义入场和出场动画,支持延迟、持续时间和缓动函数配置
  • loop:布尔值,控制动画是否循环播放

通过调整这些动画参数,可以创建从简单到复杂的各种动画效果,增强用户体验。对于大数据量场景,建议禁用动画或使用轻量级的预设配置,以避免性能问题。

2. 主题定制

Nivo支持通过全局主题或局部props来定制图表样式,创建统一的视觉风格:

import { createGlobalTheme } from '@nivo/core';// 创建全局主题
const globalTheme = createGlobalTheme({colors: {scheme: 'category20',text: '#333333'},axis: {tickColor: '#666666',tickThickness: 1,tickLength: 5},legend: {itemColor: '#666666',symbolSize: 15}
});// 使用全局主题
const ChartWithGlobalTheme = () => (<NivoProvider theme={globalTheme}><ResponsivePie data={data} /><ResponsiveBar data={data} /></NivoProvider>
);// 局部主题定制
const ChartWithLocalTheme = () => (<ResponsiveLinedata={data}colors={{ scheme: 'category10' }} // 局部颜色配置axisBottom={{tickColor: '#999999' // 局部轴线配置}}// 其他配置.../>
);

主题定制关键点

  • createGlobalTheme:创建全局主题,影响所有Nivo图表
  • NivoProvider:提供全局主题,包裹需要应用主题的图表组件
  • colors:颜色方案配置,支持预设色板或自定义颜色
  • axis:轴线样式配置,包括刻度线、标签和网格线
  • legend:图例样式配置,定义图例的位置、大小和颜色

全局主题特别适合需要保持一致视觉风格的项目,而局部配置则允许针对特定图表进行个性化调整。Nivo还支持通过CSS变量来进一步定制主题,提供更灵活的样式控制。

3. 数据处理

Nivo提供了丰富的数据处理配置选项,帮助开发者在渲染前对数据进行预处理:

<ResponsiveBardata={data}keys={['uv', 'pv']} // 提取数据中的uv和pv字段indexBy="country" // 以country字段作为分类依据colorBy="index" // 按分类索引分配颜色valueFormat={(value) => `${Number(value).toFixed(2)}%`} // 数值格式化legends={[ // 图例配置{anchor: 'bottom',direction: 'row',translateY: 56,itemWidth: 100,itemHeight: 18,itemTextColor: '#999',symbolSize: 18,symbolShape: 'circle'}]}// 其他配置...
/>

数据处理关键点

  • keys:从数据源中提取要绘制的值字段
  • indexBy:定义分类依据字段,用于X轴分类
  • colorBy:定义颜色分配依据,可以是index(分类索引)、value(数值大小)或id(唯一标识符)
  • valueFormat:数值格式化函数,可以是字符串或格式化函数
  • legends:图例配置,定义图例的位置、样式和交互效果
  • layers:自定义图层渲染,允许完全控制图表的绘制顺序和样式

Nivo的数据处理配置特别适合需要展示复杂数据关系的场景,如多维度比较、动态数据更新和实时数据展示等。通过灵活的数据处理配置,可以创建从简单到复杂的各种数据可视化效果。

四、实际项目中的最佳实践

1. 性能优化策略

在实际项目中,Nivo的性能优化至关重要,特别是处理大数据集时:

// 使用虚拟滚动优化长数据集
import { useWindowviewport } from '@nivo/core';const LineChartWithVirtualScroll = () => {const viewport = useWindowviewport();// 仅渲染可视区域的数据constviewportData = data.slice(viewport.start,viewport.end);return (<div style={{ height: 400 }}><ResponsiveLinedata={viewportData}keys={['value']}margin={{ top: 50, right: 110, bottom: 50, left: 60 }}// 其他配置.../></div>);
};

性能优化关键点

  • 数据采样:对于超大数据集,使用下采样技术(如平均值、最大值、最小值)减少渲染点数量
  • 虚拟滚动:仅渲染可视区域内的数据,避免一次性渲染全部内容
  • 动画优化:大数据量时禁用动画或使用轻量级的预设配置
  • 响应式设计:使用useWindowviewport钩子动态调整图表尺寸和数据量
  • 服务端渲染(SSR):在Next.js中使用dynamic导入组件,避免SSR错误
// Next.js中的SSR优化
import dynamic from 'next/dynamic';const ResponsiveBar = dynamic(() => import('@nivo/bar'), {ssr: false // 禁用服务端渲染
});const ChartPage = () => (<div><ResponsiveBar data={data} /><ResponsiveLine data={data} /></div>
);
2. 交互设计最佳实践

Nivo的交互设计是其一大亮点,通过合理的配置可以创建丰富的用户交互体验:

<ResponsiveLinedata={data}keys={['uv', 'pv']} // 多个值字段indexBy="country" // 分类依据margin={{ top: 50, right: 110, bottom: 50, left: 60 }}curve="catmullRom" // 曲线类型axisTop={null}axisBottom={{orient: 'bottom',tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '国家',legendPosition: 'middle',legendOffset: 32}}axisLeft={{orient: 'left',tickSize: 5,tickPadding: 5,tickRotation: 0,legend: '数值',legendPosition: 'middle',legendOffset: -40}}axisRight={null}legends={[ // 多图例配置{anchor: 'bottom-right',direction: 'column',justify: false,translateX: 100,translateY: 0,items体现: 2,itemWidth: 80,itemHeight: 20,itemDirection: 'left-to-right',itemOpacity: 1,symbolSize: 15,symbolShape: 'circle'}]}pointSize={10}pointColor={{ from: 'color', modifiers: [['darker', 1.6]] }}pointBorderWidth={2}pointBorderColor={{ from: 'color' }}pointLabelYOffset={-12}enablePointLabel={true}areaColor={{ from: 'color', modifiers: [['darker', 0.5]] }}areaOpacity={0.3}motionConfig="gentle"// 交互配置interactivityConfig={{crosshair: {type: 'circle',thickness: 2,color: '#333333'},labels: {enabled: true,format: (value) => `${value} 万`}}}// 自定义交互效果effects={[ // 悬停效果{on: 'hover',style: {pointSize: 15,pointColor: '#000000'}}]}// 点击事件处理onClick={(event) => {console.log('点击数据点:', event);// 可在此处触发数据筛选或其他交互操作}}
/>

交互设计关键点

  • interactivityConfig:交互配置,定义交叉线、标签和悬停效果
  • effects:自定义交互效果,如悬停时的数据点放大或颜色变化
  • onClick:点击事件处理,可以用于数据筛选或联动其他图表
  • onMouseEnteronMouseLeave:鼠标悬停事件处理,可以用于显示详细信息
  • TOOLTIP:自定义提示框内容,可以返回任意React元素

合理的交互设计可以显著提升用户体验,使数据可视化更加直观和易用。通过结合Nivo的交互配置和自定义事件处理,可以创建从简单到复杂的各种交互体验。

3. 多图表联动

在复杂的数据可视化场景中,多图表联动是一种常见的需求,可以通过状态管理实现:

import { useState } from 'react';// 使用Redux或Context API管理共享状态
const App = () => {const [filteredData, setFilteredData] = useState(data);// 数据筛选函数const handleFilter = (condition) => {const newFilteredData = data.filter(condition);setFilteredData(newFilteredData);};return (<div><ResponsiveBardata={filteredData}keys={['uv', 'pv']}indexBy="country"margin={{ top: 50, right: 130, bottom: 50, left: 60 }}padding={0.3}colors={{ scheme: 'category10' }}// 其他配置.../><ResponsiveLinedata={filteredData}keys={['uv', 'pv']}indexBy="country"margin={{ top: 50, right: 110, bottom: 50, left: 60 }}curve="catmullRom"// 其他配置.../><FilterControl onFilter={handleFilter} /></div>);
};

多图表联动关键点

  • 使用状态管理库(如Redux、Context API)共享数据筛选状态
  • 定义统一的数据格式和转换逻辑
  • 实现数据筛选函数,根据条件过滤数据
  • 在多个图表中使用相同的过滤后数据
  • 通过交互事件(如点击、滑动)触发数据更新

多图表联动特别适合需要从多个角度分析同一数据集的场景,如数据看板、分析报告等。通过合理的状态管理和数据共享,可以创建从简单到复杂的各种联动效果。

五、常见问题与解决方案

1. 依赖安装问题

问题描述:安装Nivo时遇到依赖安装失败的问题,尤其是在使用npm或yarn时。

解决方案

  • 检查Node.js版本:确保Node.js版本在12.0.0以上,因为Nivo依赖于较新的JavaScript特性。
  • 清理缓存:运行npm cache clean --forceyarn cache clean清理npm/yarn缓存。
  • 重新安装依赖:删除node_modules文件夹和package-lock.json/yarn.lock文件,然后重新运行npm installyarn install
2. 图表渲染问题

问题描述:图表无法正确显示,尤其是在使用自定义数据时。

解决方案

  • 检查数据格式:确保数据格式符合Nivo组件的要求,如饼图需要idvalue字段,条形图需要indexBykeys字段。
  • 调试数据:使用console.log打印数据,确保数据正确传递到组件中。
  • 父容器尺寸:确保父容器有明确的高度和宽度,特别是使用响应式组件时。
  • 数据采样:对于大数据集,考虑使用数据采样技术减少渲染点数量 。
3. 服务端渲染(SSR)问题

问题描述:在Next.js等框架中使用Nivo进行服务端渲染时,图表无法正确渲染。

解决方案

  • 使用dynamic导入:在Next.js中使用dynamic导入组件,设置ssr: false避免SSR错误 。
  • 数据预处理:在服务端渲染前确保数据已加载,避免客户端异步请求导致白屏。
  • 虚拟滚动:对于大数据集,使用虚拟滚动技术仅渲染可视区域内的数据 。
  • 动画优化:禁用动画或使用轻量级的预设配置,减少服务端渲染负担 。
// Next.js中的SSR优化
import dynamic from 'next/dynamic';const ResponsiveBar = dynamic(() => import('@nivo/bar'), {ssr: false,loading: () => <div>Loading chart...</div>
});const ChartPage = () => {// 确保数据已加载const [chartData, setChartData] = useState(null);useEffect(() => {fetchData().then(data => setChartData(data));}, []);return (<div>{chartData ? (<ResponsiveBar data={chartData} />) : (<p>Loading data...</p>)}</div>);
};
4. 移动端适配问题

问题描述:图表在移动端显示不理想,如标签重叠、交互区域过小等。

解决方案

  • 使用响应式组件:优先使用Responsive[ChartType]组件,它们能够自动适应容器尺寸。
  • 移动端优先的边距:调整margin配置,为移动端预留更多空间。
  • 触摸友好的交互区域:增加数据点大小和标签间距,提高触摸精度。
  • 移动端专用配置:使用媒体查询或条件渲染,为移动端提供专用配置。
// 移动端适配配置
<ResponsivePiedata={data}margin={{ top: 20, right: 20, bottom: 20, left: 20 }}innerRadius={0.4}padAngle={0.5}cornerRadius={2}colors={{ scheme: 'category10' }}legends={{anchor: 'bottom',direction: 'column',translateY: 24,itemWidth: 60,itemHeight: 12,itemTextColor: '#666666'}}// 其他配置...
/>

六、Nivo与其他图表库的对比

Nivo在React图表库中有着独特的位置,以下是与主流图表库的对比:

特性NivoRechartsChart.jsVictory
包体积中等中等
学习曲线较陡平缓平缓平缓
定制化程度中等中等
数据处理能力大规模数据中等数据量中等数据量中等数据量
React集成度中等中等
渲染模式SVG、Canvas、HTMLSVGCanvas、SVGSVG
动画效果流畅、物理模拟简单、基础简单、基础中等、可配置
适用场景高度定制化、设计优先快速开发、中小型项目通用场景、跨框架使用简单、一致的API

Nivo特别适合需要高度定制化和设计优先的项目,如数据看板、BI工具和设计驱动型应用 。它的动画效果和视觉设计能力使其在需要精美数据可视化的场景中表现突出。然而,对于简单的数据展示需求,Recharts或Chart.js可能更为合适,它们的包体积更小,学习曲线更平缓。

七、总结与展望

Nivo作为React生态中一个基于D3.js的图表库,以其高度可定制化、流畅动画效果和响应式设计而脱颖而出。通过本文的详细配置和用法介绍,相信读者已经掌握了Nivo的基本使用方法和高级配置技巧。

Nivo的核心优势在于它能够将D3.js的复杂性隐藏在易用的React组件API之后,同时提供丰富的配置选项和精美的视觉效果。随着数据可视化在Web应用中越来越重要,Nivo有望继续发展,提供更多图表类型和更强大的数据处理能力。

在实际项目中,建议根据具体需求选择合适的图表类型和配置选项,同时关注性能优化和用户体验。对于简单需求,可以使用Nivo的默认配置快速实现;对于复杂需求,可以充分利用其高度可定制化的特点,创建独特的数据可视化效果。

最后,Nivo社区活跃,文档完善,不断有新图表类型和功能加入,开发者可以关注其GitHub仓库和官方文档,获取最新的配置和用法信息。

http://www.dtcms.com/a/499787.html

相关文章:

  • 典型营销型网站有哪些惠阳住房和城乡建设局网站
  • 算法题——贪心算法
  • 安装WordPress时没生成wp-config.php的解决方法
  • MovieNet(A holistic dataset for movie understanding) :面向电影理解的多模态综合数据集与工具链
  • 如何关联网站与网站html视频网站模板
  • 触摸未来2025-10-18:生成文字的小宇宙矩阵溯源
  • TypeScript 基础语法
  • 网站建设的栏目内容是项目建设网站
  • 货物公司网站建设方案济南网站优化排名
  • 论坛网站建设视频教程沈阳专业网站建设
  • 项目1:队列的讲解(下):C++多线程队列使用
  • web自动化测试——Excel表格数据提取
  • nerfstudio使用colmap处理图像数据的小问题
  • SQL 中的 UCASE() 函数详解
  • 中国互联网协会网站爱客crm系统
  • 企业网站导航栏高度58同城最新招聘网找工作招聘信息
  • [AI 学习日记] 深入解析MCP —— 从基础配置到高级应用指南
  • Linux 系统中修改主机名
  • 网站建设公司968青岛工程有限公司
  • makefile - NXP - busybox环境下makefile中调用系统命令的方法
  • 13 pyflink/scala 进行 csv 文件的批处理
  • java ThreadPoolExecurtor源码解读 --- Worker
  • 20251018在ubuntu24.04下解压缩gz压缩包
  • 做赚钱的网站有哪些园林绿化
  • 静态网站开发用到的技术产品报价网
  • 【小学教辅】新版一年级上册语文第四单元课课贴 一年级语文复韵母学习资料 小学拼音考点练习电子版可下载打印|夸克网盘
  • 企业网站空间不足怎么办商标设计logo免费生成器网站
  • python 字典 列表 类比c++【python】
  • plsql developer 无法跟踪调试
  • Collections 工具类 15 个常用方法源码:sort、binarySearch、reverse、shuffle、unmodifiableXxx