React Native:更新数据后未重新渲染组件

Posted

技术标签:

【中文标题】React Native:更新数据后未重新渲染组件【英文标题】:React Native: Didn't rerender the component after data was updated 【发布时间】:2021-01-16 13:45:03 【问题描述】:

我有两个屏幕,一个显示个人资料信息,另一个屏幕用于编辑信息。如果我输入第一个屏幕配置文件,它会向我显示来自数据库的正确数据。然后我移动到下一个屏幕,我可以在其中更改迄今为止工作的信息。但如果我回到前一个屏幕,我仍然会看到旧数据。所以没有重新渲染。

但是,如果我导航到另一个屏幕,该屏幕会获取新数据。并调用 getCurrentUserProfile 被执行

这是显示用户个人资料信息的屏幕。

const ProfileScreen = props => 

  const [userObj, setUserObj] = useState();

  useEffect(() => 
    let mounted = true;
    getCurrentUserProfile().then(user => 
      if (mounted) 
        setUserObj(user);
      
      console.log(user)
    );
    return () => mounted = false;
  , []);

  console.log("----b------") // This is only output on the first call


我该如何解决这个问题。有没有办法在数据库中发生更改时,让组件重新渲染并获取新数据。

谢谢。

【问题讨论】:

【参考方案1】:

您可能正在使用@react-navigation 包。因此,如果您想在返回上一页时重新获取数据,您可以在“上一页”上使用https://reactnavigation.org/docs/use-is-focused。

看看他们的文档,你就会明白了。

P.S: 通常我们不会直接卸载组件。在 React Native 中,我们使用 navigator 来挂载/卸载组件

【讨论】:

感谢您的提示。以及如何通过导航器安装/卸载组件?我真的是 react-native 和 react 的新手,所以我感谢所有提示/技巧和支持。 手动关闭所有屏幕并打开任何其他屏幕:navigation.dispatch(CommonActions.reset(index: 0, routes: [ name: ‘SomeStack’, params: screen: ‘SomeScreenInSomeStack’ ]。您可以阅读有关“重置”的文档。 reactnavigation.org/docs/navigation-lifecycle 好的,谢谢。你对 react-native 有很多经验吗?

以上是关于React Native:更新数据后未重新渲染组件的主要内容,如果未能解决你的问题,请参考以下文章

React Native - 从父组件重新渲染子组件

React Native this.setState() 仅在再次与组件交互后重新渲染

react native 踩坑之 SectionList state更新 不执行render重新渲染页面

ScrollView 在 react-native 中渲染没有数据的更新组件?

如何在 react-native 中重新渲染组件?

React Native:状态更改后无法重新渲染图像