我有一个React Native应用程序,我想在其中放置一个出现在每个屏幕上的按钮,用户可以单击该按钮以强制重新渲染(使用this.forceUpdate()
)。在每个屏幕上,我在顶部都有一个自定义的<Header>
组件,并且由于每个屏幕上都出现了重新渲染按钮,因此我希望将其重新放置在该标题中,因此只需要添加一次按钮即可。
因此,我的屏幕之一如下所示:
export default class Screen1 extends Component {
render() {
return(
<View>
<Header>
...rest of screen...
</View>
)
}
}
而
Header
看起来像这样export default class Header extends Component {
render(){
return(
<View>
<TouchableOpacity
onPress={() => this.forceUpdate()}
/>
</View>
)
}
}
单击标题中的
<TouchableOpacity>
将导致标题本身更新,而不是整个屏幕更新。我假设this.forceUpdate()
仅适用于在其中定义<TouchableOpacity>
的组件。所以我的问题是,我可以在标题中调用任何等价的this.forceUpdate()
来强制重新渲染整个屏幕吗?谢谢!
最佳答案
正如@parohy所建议的那样,这根本不是路。
但是有一个临时的技巧,您可以将this.forceUpdate()
作为道具传递给标题。
看起来像这样:
export default class Screen1 extends Component {
render() {
return(
<View>
<Header forceUpdate={this.forceUpdate}>
...rest of screen...
</View>
)
}
}
export default class Header extends Component {
render(){
return(
<View>
<TouchableOpacity
onPress={() => this.props.forceUpdate()}
/>
</View>
)
}
}