我有一个React图js2组件,我试图使一个梯度上的填充,但我得到了一些不同的打字错误,似乎不能让它工作。
文档中说要把数据属性作为一个函数传递,并引用画布,以便访问画布上下文来添加渐变。不幸的是,这并不起作用。
下面是这些文件的代码:https://codesandbox.io/s/modest-bird-j2in8(文件线图渐变. tsx)
我得到的错误与CanvasContext和向chartjs组件传递数据函数有关
- 数据**
const data = (canvas: HTMLCanvasElement) => {
const ctx = canvas.getContext("2d");
const gradient = ctx.createLinearGradient(0, 0, 0, 200);
gradient.addColorStop(0, "rgba(250,174,50,1)");
gradient.addColorStop(1, "rgba(250,174,50,0)");
return {
labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
datasets: [
{
label: "First dataset",
data: [33, 53, 85, 41, 44, 65],
fill: "start",
backgroundColor: "rgba(75,192,192,0.2)",
borderColor: "rgba(75,192,192,1)"
},
{
label: "Second dataset",
data: [33, 25, 35, 51, 54, 76],
fill: "start",
borderColor: "#742774"
}
]
};
};
- 组件**
return (
<div>
<Line data={data} options={options} />
</div>
);
错误#1
const gradient = ctx.createLinearGradient(0, 0, 0, 200);
- Typescript表示此对象可能为null *,这很好,我可以检查它是否存在,但这是我的第一个线索,表明画布元素未被传递
错误#2
<Line data={data} options={options} />
- 类型"(画布:)"中缺少属性"datasets"HTML画布元素)=〉{标签:字符串[];数据集:*
当把数据作为函数传递时,我会得到这个错误,但是如果我只是把data函数返回的对象放到data prop中,图形就会呈现得很好(参见LineChart.tsx)。
在react-chartjs-2中访问画布上下文以添加渐变填充的正确方法是什么?
3条答案
按热度按时间11dmarpk1#
这是因为在调用data函数时,没有向其传递任何画布
但是画布在这里也是不可用的。如果你想做一个自定义的渐变,你需要为
backgroundColor
应用一个脚本选项,如下所示:同时确保在数据字段中调用该函数,使html变为:
工作代码和框:https://codesandbox.io/s/interesting-faraday-204ugi?file=/src/LineChartGradient.tsx
6uxekuva2#
如果有人需要React解决方案,这里的解决方案可能会产生额外的错误,如 “createLinearGradient不是函数” 或 “document.getElementById()返回null”,因为它在加载DOM之前查找图表ID。
一个干净的解决方案是将图表创建为功能组件,并确保注册了所有需要的ChartJS资产。
1.确保ChartJS已正确初始化和注册
2.使用ScriptableContext添加渐变
实时代码打印,带折线图渐变enter link description here
r7s23pms3#
所以看起来你的代码有很多错误,我试图通过解决第二个问题来帮助你,
data
应该是json而不是函数,所以要解决这个问题,你应该在传递函数之前执行它,如下所示: