我似乎无法更新我的ListView
。
我有一个带拨动开关(<SegmentedControls />
)的父容器。当用户单击该切换开关时,我希望子组件中的ListView
使用更新的reservationListSelectedOption
状态值进行更新。
我想念什么?
此处的代码:https://gist.github.com/chapeljuice/69483ab0bde13346de024d4e4a9753f0
最佳答案
实际上,在您的构造函数中设置dataSource
的方式存在问题,您使用以下方法首次设置了它:new ListView.DataSource({})
(此后不应该更改,因为这只是一种虚拟的东西,没有数据传递给它)
但是,稍后您使用以下命令重置该状态:dataSource: this.state.dataSource.cloneWithRows(reservationData.previous)
=>(这里有cloneWithRows
,因此现在将有数据=>,这意味着this.state.dataSource
“虚拟帧”本身已被更改,并且.cloneWithRows
的下一次执行将失败-将不具有.cloneWithRows
功能了)
======>解决方案:
我认为您可以:
在cardList.js中:
// Put the data-source ds here, which won't be changed
var ds = new ListView.DataSource({rowHasChanged: (row1, row2) => row1 !== row2});
class CardList extends React.Component {
constructor(props) {
super(props);
this.state = {
reservationListStatus: this.props.reservationListStatus,
dataSource: ds.cloneWithRows(/* PUT YOUR INITIAL reservationData, OR JUST a blank array '[]' will be fine*/),
};
}
..及后,您只需要使用
ds.cloneWithRows(YOUR_NEW_RESERVATION_DATA)
(始终保持ds
不变),如下所示: getReservationData() {
if ( this.props.reservationListStatus === "Previous Reservations" ) {
this.setState({
dataSource: ds.cloneWithRows(reservationData.previous)
})
} else {
this.setState({
dataSource: ds.cloneWithRows(reservationData.current)
})
}
console.log(this.state)
}
那是您应该采取的方式,但是如果仍然无法使用,请在此处发布您遇到的一些错误,谢谢