我有一个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>
    )
  }
}

10-05 17:43