我在React Native中有一个基于TabBar的应用程序。 多个选项卡使用相同的数据源(AsyncStorage)。 如果我现在在一个选项卡中更新数据并打开另一个选项卡,则会显示旧数据。 我无法弄清楚,每次项目变为活动时如何强制重新加载。
FavoritesView:显示过期数据( - >强制重新加载)
<TabBarIOS.Item
title="Explore"
icon={{uri:'ic_explore'}}
selected={this.state.selectedTab === 'exploreTab'}
onPress={() => {
this.setState({
selectedTab: 'exploreTab'
});
}}>
<ExploreView/>
</TabBarIOS.Item>
<TabBarIOS.Item
title="Favorites"
icon={{uri:'ic_favorite_border'}}
selected={this.state.selectedTab === 'favoriteTab'}
onPress={() => {
this.setState({
selectedTab: 'favoriteTab'
});
}}>
// Reload this
<FavoritesView/>
</TabBarIOS.Item>
<TabBarIOS.Item
systemIcon="more"
selected={this.state.selectedTab === 'moreTab'}
onPress={() => {
this.setState({
selectedTab: 'moreTab'
});
}}>
<MoreView/>
</TabBarIOS.Item>
我已经尝试设置一个新状态来触发更新,但它似乎没有改变任何东西。
<TabBarIOS.Item
title="Favorites"
icon={{uri:'ic_favorite_border'}}
selected={this.state.selectedTab === 'favoriteTab'}
onPress={() => {
this.setState({
selectedTab: 'favoriteTab',
forceUpdate: Math.random()
});
}}>
<FavoritesView forceUpdate={this.state.forceUpdate}/>
</TabBarIOS.Item>
答案 0 :(得分:1)
我有一个类似的问题,最终对我有用的是覆盖嵌入式视图上的componentWillReceiveProps。只要在TabBarIOS中将视图设置为selectedTab,就会调用它。
https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops
答案 1 :(得分:0)
this
引用父组件。
尝试在TabBar项目中添加ref
并使用this.refs.refName.forceUpdate()
(稍微好于使用随机值更新状态)。