无法在我的反应本机应用程序中清理订阅

Posted

技术标签:

【中文标题】无法在我的反应本机应用程序中清理订阅【英文标题】:Unable to cleanup subscription in my react native app 【发布时间】:2022-01-21 02:09:54 【问题描述】:

在我的 react 本机应用程序中,我在 useEffect 挂钩中订阅了 CartProduct 数据模型,并使用返回函数取消了在组件卸载时应该运行的订阅。但这似乎不起作用,因为当我从另一个屏幕更改 CartProduct 模型时,我可以在控制台中看到 getCartProduct() 运行。如何解决这个问题?

const[cartProducts, setcartProducts] = useState <CartProduct[]>([]);
  
const currentUserId = "28ab9cfc-6f0e-4cb4-9ac8-c875aecc7"

const getCartProduct = async () => 
    
    await DataStore.query(CartProduct, c=>c.userID("eq", currentUserId)).then(setcartProducts);
    console.log("fetching!")
    ;
  
  
  useEffect(() => 
    
    const subscription = DataStore.observe(CartProduct, d=>d.userID("eq", currentUserId)).subscribe(msg =>
     getCartProduct(),
    );
    return subscription.unsubscribe;
   , []);

   
 useEffect(() => 

      getCartProduct()
         
    , []);

【问题讨论】:

【参考方案1】:

您是否尝试用粗箭头函数包装 useEffect cb?

  useEffect(() => 
    
    const subscription = DataStore.observe(CartProduct, d=>d.userID("eq", currentUserId)).subscribe(msg =>
     getCartProduct(),
    );
    return ()=> 
     console.log("unsubscribe -> ")
     subscription.unsubscribe()
    ;
   , []);

   

【讨论】:

谢谢,迈克尔,我会试试这个,让你知道

以上是关于无法在我的反应本机应用程序中清理订阅的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端(反应) - 无法更新未安装组件的状态

如何使用 expo-av 在本机反应中播放背景音频?

如何监控 http 请求以便在我的 ios 应用程序中查看我的标头请求,内置反应本机

我如何检查安装在反应本机代码中的应用程序

无效的反应本机权限 ios.PERMISSION.CAMERA

在本机反应中打开地图/谷歌地图