1977474741/spa-custom-hooks

无法命中onUpdate钩子

QAQLC opened this issue · 5 comments

export const globalData = {
    token: '',
}
CustomHook.install(
    {
        Token: {
            name: 'Token',
            watchKey: 'token',
            onUpdate(token: string | undefined) {
                console.log('onUpdate', token)
                return !!token
            },
        },
    },
    globalData
)
在代码中将globalData中的token清空
getApp().globalData.token = ''

预期会命中onUpdate钩子,结果并没有

是console没打印吗?token清空之前是啥

是console没打印吗?token清空之前是啥

token 就是正常的jwt字符串,是的,console不打印。
代码精简逻辑,app.ts onLaunch中获取token并给通过如下代码赋值

onLaunch() {
        const token = (this.globalData.token = getToken())
        if (!token) {
            this.doLogin().then(token => {
               const app = getApp<IAppOption>()
               app.globalData.token = token
            })
        }
    },
   其他页面通过getApp().globalData.token = '' 将token情况,onUpdate钩子无法命中

清空后下次进入页面涉及token的钩子依旧执行了吗?比如onLoadToken、onShowToken

清空后下次进入页面涉及token的钩子依旧执行了吗?比如onLoadToken、onShowToken

这个到没有在意,我已经改用proxy自己实现了。
我不清楚是不是我使用姿势问题,我翻看了issue竟然没有人提,这个问题。按理说这个问题,应该很容易暴露出来才对,代码其实没有什么东西就是如下

export const globalData = {
    token: '',
}
CustomHook.install(
    {
        Token: {
            name: 'Token',
            watchKey: 'token',
            onUpdate(token) {
                console.log('onUpdate', token)
                return !!token
            },
        },
    },
    globalData
)
在控制台将值清空,很容易就复现了
getApp().globalData.token = ''

你清空是做什么用,不就是在下次执行涉及Token的钩子的时候不再执行吗,是原生微信小程序是吧?