javascript - 图表不会在状态更改时呈现
问题描述
我正在测试 react-native 并且我正在尝试制作一个简单的 lineChart 来重绘道具更改。我有一个父组件 HomeScreen,它将整数数组作为道具传递给 LineChart 子组件。但是,永远不会绘制 LineChart。
我试过传入一个已经初始化的带有虚拟值的数组。lineChart 子组件随后将呈现,但不会在后续状态更改时重新呈现。
我已经检查了 react-devtools 中 state 和 props 的实际值,并且子组件确实收到了 props 并且状态已更新。如何让图表呈现我传递的道具?
更新:所以我从这里的回复中得到了建议,并使组件正常工作。图表现在呈现,但道具类型仍然存在问题。我将进一步调查并阅读 react-native-svg 文档。谢谢!
enter code here
import React from 'react';
import { View } from 'react-native';
import { LineChart, Grid } from 'react-native-svg-charts'
const BeatChart = ({ data }) => (
<LineChart
style={{ height: 200 }}
data={data}
svg={{ stroke: 'rgb(0, 255, 255)' }}
contentInset={{ top: 20, bottom: 20 }}
>
<Grid />
</LineChart>
);
export default BeatChart;
解决方案
由于渲染发生在道具的每次更改上,您可以注释这部分代码。
static getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.data !== prevState.data) {
return { data: nextProps.data };
}
return null;
}
即使您想实现它,如果需要,请使用componentWillmount 。
否则代码工作正常。
所以你的最终代码就像:
import React from 'react';
import { View } from 'react-native';
import { LineChart, Grid } from 'react-native-svg-charts'
class BeatChart extends React.PureComponent {
constructor(props) {
super(props)
this.state = {
data: [],//your data
}
};
// static getDerivedStateFromProps(nextProps, prevState) {
// if (nextProps.data != prevState.data) {
// return { this.setState({data: nextProps.data}) };
// }
// return null;
// }
render() {
const arr = this.state.data;
return (
<LineChart
style={{ height: 200 }}
data={arr}
svg={{ stroke: 'rgb(0, 255, 255)' }}
contentInset={{ top: 20, bottom: 20 }}
>
<Grid />
</LineChart>
)
}
}
export default BeatChart;
推荐阅读
- clojure - 宏观构成
- google-cloud-platform - Cloud Function + Cloud Build:如何在构建时将文件添加到函数中
- dplyr - 删除 dplyr 中部分相同的行
- angularjs - 我正在使用动态面板。我使用了“折叠”按钮。问题是,折叠按钮仅适用于第一个面板
- r - 需要安排可以在 2 小时间隔内运行的 R 脚本
- javascript - react-native-calendar :使用弹出窗口应用自定义多标记
- java - 如何为用户定义的类实现通用比较器
- php - 想要在不刷新页面的情况下获取 php sql 查询的下拉值
- docker - 詹金斯不在奴隶上运行工作
- shell - 删除匹配的单词,但在文件中保留原始单词