Git Product home page Git Product logo

spa-custom-hooks's Introduction

Hi there!

鹅鹅鹅's GitHub stats

  • 🚢 Open source enthusiasts
  • 🔭 Technology stack: Vue, Mini Program
  • 💬 A programmer with ideas,Like to simplify complicated things
  • ❤️ Cats 😸, Mobile Games 🎮 and Music 🎵

spa-custom-hooks's People

Contributors

1977474741 avatar semantic-release-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spa-custom-hooks's Issues

属性钩子首次进入不触发

// app.ts
export const globalData: IAppOption['globalData'] = {
    token: '',
}
CustomHook.install(
    {
        Login: {
            name: 'login',
            watchKey: 'token',
            onUpdate(token: string | undefined) {
                console.log('tolen', token)
                return !!token
            },
        },
    },
    globalData
)
Page({
onShowLogin() {}
})

首次进入小程序在app.ts中onLaunch函数中获取token,并赋值给globalData中的token, 期望赋值之后Page页面的onShowLogin能触发,结果不触发

项目初次进入无法触发自定义hook

app.js

import CustomHook from 'spa-custom-hooks';

let globalData = {
token: '',
userInfo: null,
selectedSchool: null
}

CustomHook.install({
'Login': {
name: 'Login',
watchKey: 'token',
onUpdate(val) {
//有token则触发此钩子
return !!val;
}
},
'User': {
name: 'User',
watchKey: 'userInfo.id',
onUpdate(val) {
//获取到userinfo里的userId则触发此钩子
return !!val;
}
}
}, globalData || 'globalData')

// 获取用户信息
let userInfo = wx.getStorageSync('userInfo')
if (!userInfo) {
userInfo = await Api.userApi.getUserInfo();
wx.setStorageSync('userInfo', userInfo)
}
this.globalData.userInfo = userInfo
console.log("app.js获取到用户ID:" + this.globalData.userInfo.id)`

page.js

onLoadUser(options) {
console.log("school页面进入登录回调逻辑")
this.setData({
userInfo: app.globalData.userInfo
})
console.log(app.globalData.userInfo)
console.log(this.data.userInfo)
const location = wechat.getLocation('wgs84')
const locationParams = {
longitude: location.longitude || null,
latitude: location.latitude || null
}
this.listSchool(locationParams)
},
onLoad() {
console.log("school页面进入onLoad")
}

日志内容

school页面进入onLoad
dict.js? [sm]:11 1702870222000
dict.js? [sm]:13
app.js? [sm]:97 app.js获取到用户ID:1735194858279395330

this指向问题

uniapp 微信小程序项目

我在 main.js 配置了 diyHook

import CustomHook from 'spa-custom-hooks';
const diyHooks = {
  'TokenLoad':{
    name:'TokenLoad',
    watchKey: ['token'],
    deep: true,
    onUpdate(val){
      //userinfo里的nickName非空则表示命中此钩子
      return !!val;
    }
  }
}

Vue.use(CustomHook ,diyHooks,store)

然后在 App.vue中登录将token 置入 store内

 wxLogin({
              jsCode: res.code,
              inviteCode: inviteCode || ''
            }).then(res=>{
              if(res.success){
                that.$store.commit('setToken', res.data.token);
                console.log("this.$store.getToken", that.$store.getters.getToken)
              } else {
                uni.showToast({
                  icon:"error",
                  title:'登录失败'
                })
              }
            })

当我第一页面加载的时候,onTokenLoad 被调用 这里这时候正常的 this指向也没问题

但是当我切换tab页面后,第二页面加载的时候 onTokenLoad 中 的this调用当前vue下的方法或者值都是 underfine

请问有没有遇到过这种问题呢? 在第二页面中的onLoad 方法中的this都是正常的。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.