我对listview的重新渲染机制感到困惑。
Page 1已经生成了包含两个项目的列表视图,然后单击“添加”按钮,导航到另一个页面,并向页面1的数据源添加一个项目,然后向后添加导航器。
我期望看到的是第1页有三个项目,但实际上是Page 2,listview消失了。但如果我用鼠标/手指触摸它,listView会再次出现三个项目。 我在我的iphone和模拟器上测试了它
第1页的源代码:
class Market extends Component {
constructor(props) {
super(props)
this.state = {
dataSource: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }),
}
}
componentDidMount() {
this.refreshListView(this.props.data)
}
componentWillReceiveProps(nextProps) {
this.refreshListView(nextProps.data)
}
refreshListView() {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(data)
})
}
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={this._renderRow}
refreshControl={
<RefreshControl/>
}
/>
)
}
const mapStateToProps = createSelector(
selectData(),
(data) => ({
data,
})
)
export default connect(mapStateToProps)(Market)
答案 0 :(得分:1)
刚刚找到了固定我的东西!尝试将removeClippedSubviews={false}
添加到您的ListView
https://github.com/facebook/react-native/issues/8607#issuecomment-231371923