如何取消订阅数组

How to unsubscribe from an array of subscription

我想使用来自 Apollo 查询的 subscribeToMore 数组。我受到了这个article的启发,期望我想使用一个功能组件:

useEffect(() => {
    const unsubscribe =
        [subscribeToMore({
            // subscriptionData...
        }), subscribeToMore({
            // subscriptionData...
        })]


    if (unsubscribe.length > 0) {
        for (i = 0; i < unsubscribe.length; i++) {
            return () => unsubscribe[i]()
        }
    }
}, [subscribeToMore])

但是,我得到:

In unsubscribe[i](), unsubscribe[i] is undefined

useEffect 只有一个 return 函数。你不能多次调用它。相反,在 return 函数中,您可以检查条件并取消订阅是否有要清除的订阅

useEffect(() => {
    const unsubscribe =
        [subscribeToMore({
            // subscriptionData...
        }), subscribeToMore({
            // subscriptionData...
        })]

    return () => {
       if (unsubscribe.length > 0) {
           for (i = 0; i < unsubscribe.length; i++) {
               unsubscribe[i]()
           }
       }
    }

}, [subscribeToMore])