【发布时间】:2019-10-12 01:22:38
【问题描述】:
我创建了基于 Redux 调度的房间对象创建的动态 Room 组件。
{
rooms && rooms.map((room, index) => {
const { name, temperature, humidity, timestamp } = room
return (
<Col key={index} xs={12} md={6}>
<Room
index={index}
name={name}
temperature={temperature}
humidity={humidity}
/>
</Col>
)
})
}
每个房间的细节都安装正确。我创建了一个函数来维护一个数组中的 10 个对象。但是,当数组传入 Rechart 时,似乎我的组件正在更新相同的状态。
class Room extends Component {
linechart = () => {
const { timestamp, temperature, humidity, name } = this.props
const { chartData } = this.state
if(chartData.length > 9) chartData.shift()
chartData.push({
name,
timestamp: moment(timestamp).format('mm:ss'),
temperature,
humidity})
}
}
如您所见,组件详细信息已正确显示。然而,chartData 的值被存储在相同的状态,尽管是唯一的组件。
我以 1 秒的间隔运行该函数,日志显示状态正在以 0.5 秒的间隔更新。这意味着两个<Room/> 组件都使用相同的<LineChart/> 组件。
有谁知道如何解决这个问题?
【问题讨论】:
-
您的 chartData 似乎是由您的组件状态提供的,而不是您的道具。
-
const { chartData } = this.state应该是const { chartData } = Object.assign({}, this.state) -
我认为问题不在于状态的使用。我使用了 1 秒的间隔,日志显示状态正在以 0.5 秒的间隔更新。这意味着两个组件都使用相同的
组件。 -
我认为你不应该改变状态,就像你对
chartData.shift()所做的那样。 -
组件Room有状态吗?如果是,为什么要更改 chartData 而不使用 setState 来存储它?如果没有 setState,则不会调用 render() 来刷新绘图
标签: javascript reactjs react-state-management