从嵌套组件屏幕反应本机屏幕刷新

时间:2020-10-14 01:00:35

标签: react-native react-native-navigation

我有一个屏幕PDP,该屏幕包含一个组件TopNews。我希望TopNews onclick重绘PDP(它传递了文章ID,PDP用来检索文章)。下图显示了流程

enter image description here

我在TopNews中支持此功能的代码是;

<TouchableOpacity onPress={() => navigation.navigate('Pdp', {articleid: item.id})}>

挑战是TouchableOpacity事件触发器,但是页面无法刷新PDP。我不想只刷新PDP,因为我可能会将TopNews组件包括在PDP之外的其他屏幕中,只是在这种情况下,它是它需要调用的屏幕内部。

2 个答案:

答案 0 :(得分:0)

要做的事情不止一种。

您可以为商品ID创建一个状态,并允许TopNews设置此状态:

const PDP = () => {
  const [ id, setId ] = React.useState(0);
  return (
    <div>
      <ArticleComponent articleId={id} />
      <TopNews idSetter={setId} />
    </div>
  );
}

const ArticleComponent = ({ articleId }) => {
  return /* something that renders the article by the id */ ;
}

const TopNews = ({ idSetter }) => {
  return (
    <TouchableOpacity
      onPress={() => {
        idSetter(item.id);
        navigation.navigate('Pdp')
      }}>
  );
}

另一种更优雅的方法是使用react contexts。您可以在PDP组件中创建上下文提供者,并在任何PDP的子组件中更改上下文数据。

答案 1 :(得分:0)

我找到了答案,而不是使用navigation.navigate,而是使用navigation.push;

<TouchableOpacity onPress={() => navigation.push('Pdp', {articleid: item.id})}>

这很完美:)