javascript - Rechart 组件可以用 React.lazy 加载吗?
问题描述
我正在尝试实现代码拆分,但某些组件无法正常工作。从文档中,组件必须来自export default
,这些是。我还尝试将它们默认导出到我自己的文件中,但它不起作用。
这是一个示例组件。几个组件能够被拆分,如果我尝试这样做,其余的不会渲染。
import React, { lazy, Suspense } from 'react'
import {
Bar,
CartesianGrid,
Legend,
Tooltip,
XAxis,
YAxis,
} from 'recharts'
const BarChart = lazy(() => import('recharts/lib/chart/BarChart'))
const ResponsiveContainer = lazy(() => import('recharts/lib/component/ResponsiveContainer'))
const barAxisTick = ({ x, y, payload }) => {
return (
<g transform={`translate(${x},${y})`}>
<text dy={16} textAnchor="middle" fill="#666">{payload.value}</text>
</g>
)
}
const StackedBarChart = ({ data, height }) => (
<Suspense fallback={<div style={height}></div>}>
<ResponsiveContainer height={height.height} id="timeline">
<BarChart data={data} margin={{ top: 16, right: 32, left: 8, bottom: 5 }}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="name" tick={barAxisTick} />
<YAxis />
<Tooltip />
<Legend />
<Bar dataKey="Collected" stackId="a" fill="#1976d2" />
<Bar dataKey="Due" stackId="a" fill="#d32f2f" />
</BarChart>
</ResponsiveContainer>
</Suspense>
)
export default StackedBarChart
解决方案
const BarChart = lazy(() => import('recharts').then(module => ({ default: module.BarChart })));
const ResponsiveContainer = lazy(() => import('recharts').then(module => ({ default: module.ResponsiveContainer })));
const Bar = lazy(() => import('recharts').then(module => ({ default: module.Bar })));
const XAxis = lazy(() => import('recharts').then(module => ({ default: module.XAxis })));
const YAxis = lazy(() => import('recharts').then(module => ({ default: module.YAxis })));
const CartesianGrid = lazy(() => import('recharts').then(module => ({ default: module.CartesianGrid })));
const Tooltip = lazy(() => import('recharts').then(module => ({ default: module.Tooltip })));
const ReferenceLine = lazy(() => import('recharts').then(module => ({ default: module.ReferenceLine })));
recharts 没有导出默认值,所以你必须像这样导入
推荐阅读
- python - Pandas DF 上的多条件格式化
- flyway - 当 SQL 语句中有双引号时,Sybase ASE 上的 Flyway 会导致 Invalid column name 错误
- asp.net - 有什么方法可以从此代码中将用户的角色保存在令牌中?
- batch-file - 带有排除标志的 Xcopy 命令仍然会带来排除的文件
- javascript - 如何使用对象重用 JavaScript 函数属性
- javascript - 由于内容安全策略,Mozilla 团队禁用了我的插件 - 如何正确设置清单?
- java - 加载类和静态块
- c - 如何在汇编中调用函数?
- firefox - Google 云控制台上的空白顶部菜单
- java - 如何在用户输入完成之前继续输入字符串