今天遇到一件极坑的事情,关于uni.setStorageSync: Invalid args: type check failed for args “key”. Expected String, got Boolean with value true.
项目是网上下的一个element-plus、uniapp 混搭的框架https://ext.dcloud.net.cn/plugin?id=16396
异常代码如下:
1、全局store/constants.js
export const uniAdminCacheKey = {
theme: "uni-admin-theme", // 主题
showLogo:true,
showHeader:true,
}
2、全局store/modules/app.js
import {uniAdminCacheKey} from '../constants.js'
export default {
namespaced: true,
state: {
showLogo:uni.getStorageSync(uniAdminCacheKey.showLogo) ,
showHeader:uni.getStorageSync(uniAdminCacheKey.showHeader) ,
},
mutations: {
SET_showLogo: (state, showL) => {
uni.setStorageSync(uniAdminCacheKey.showLogo, showL)
state.showLogo= showL)
},
SET_showHeader: (state, showH) => {
uni.setStorageSync(uniAdminCacheKey.showHeader, showH)
state.showHeader = showH
},
}
3、调用:demo.vue
<view >显示Header</view> <el-switch @change="change1" v-model="a1" />
</view>
<view >>显示Logo</view> <el-switch @change="change2" v-model="a2" />
</view>
import { mapMutations} from 'vuex'
mounted() {
this.a1 = this.$store.state.app.showHeader;
this.a2 = this.$store.state.app.showLogo;
},
methods: {
...mapMutations('app', [ 'SET_showLogo', 'SET_showHeader']),
change1(e) {
this.SET_showHeader(e)
},
change2(e) {
this.SET_showLogo(e)
},
}
症状是,两个switch ,一开都开,一关都关。
百思不得其解,直到我看到了警告信息,才反应过来,
嗯,是警告不是异常。离谱。
store/modules/app.js中
showLogo:uni.getStorageSync(uniAdminCacheKey.showLogo) ,应该是
showLogo:uni.getStorageSync("showLogo")==undefined? uniAdminCacheKey.showLogo:uni.getStorageSync("showLogo")
uni.setStorageSync(uniAdminCacheKey.showLogo, showL) ,应该是
uni.setStorageSync("showLogo", showL)
uniAdminCacheKey.showLogo 作为true 或false 作 getStorageSync 的 key确实不对:
问题不难,一时没反应过来,也没想到别人分享的代码里有这么个坑