【问题标题】: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()
         
    }, []);

【问题讨论】:

    标签: javascript reactjs react-native react-hooks aws-amplify


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,迈克尔,我会试试这个,让你知道
    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多