我需要在react本机中创建一个图表,它每隔500米/秒从一个本地模块获取数据(数组整数),并在实时更新中绘制它们,为此我使用了“react本机-svg”,我实际上可以更新图表,但是性能非常慢,并且经常发生崩溃。
数组的结果最多接受1800个结果,然后图形滚动
...
const [data, setData] = useState(new Array(1800).fill(0));
...
侦听器中的从本机模块和更新数组中获取数据,我从本机模块传递一个由60个元素组成的数组,因为它每500 m/s需要60个元素(e.values是60个整数的数组)。
...
setData(state => {
state.splice(0, 60)
return [...state, ...e.values]
})
...
图表
...
<LineChart
style={ { flex: 1 } }
data={data.map(dt => {
return dt
})}
svg={ {
strokeWidth: 2,
stroke: '#2171bf',
} }
yMin={-5000}
yMax={10000}
numberOfTicks={25}
>
<CustomGrid belowChart={true} />
</LineChart>
...
我试过其他图表库,但结果都一样。
抱歉,如果语言不完美的话。
发布于 2021-02-14 18:15:27
在使用我尝试过的所有基于SVG的库Reactive原住民时,我一直在努力提高性能。最近,我决定尝试在WebView
中使用几个基于画布的绘图库,并取得了很好的效果。最后,我做了一个简单的包:https://www.npmjs.com/package/@dpwiese/react-native-canvas-charts。
如果你不想使用这个包,而是自己做它,它是非常简单的。虽然包源代码可能是最好的资源,但我将总结以下步骤:
let webref
。WebView
和onLoadEnd
,您可以将一些JavaScript注入到WebView
中,以配置和创建图表 (webref = r)} source={htmlTemplate} onLoadEnd={() => { addChart(config) } />
其中addChart
看起来类似于: const addChart = config => { webref.injectJavaScript(const el = document.createElement("canvas"); document.body.appendChild(el); window.canvasLine = new Chart(el.getContext('2d'), ${JSON.stringify(config)});
);};
config
是一个有效的Chart.js配置。window.canvasLine.config.data.datasets[${i}].data = ${JSON.stringify(dataSets[i])}; window.canvasLine.update();
);});};};
其中dataSets
是有效的Chart.js数据集。https://stackoverflow.com/questions/63644492
复制相似问题