查过资料没有什么结果,首先怀疑的是 SSR 的问题,但是简单的测试感觉不是 SSR 的问题。没有找到原因,希望在这里能得到解惑!
使用 Nuxt.js 做服务端渲染,前后端分离,Token 存储在 localStorage 里,也包含了一些一般不会改动用户信息。
因为需要读 localStorage 存储的用户信息,在服务端是无法操作的,所以在 beforeMount() 的时候用 Vuex 将 localStorage 的 Token 给读出来,以及包含一些用户信息。
存储的用户信息是 JSON,在组件或页面中使用 mapState 或者是 mappGetters 映射到 computed 后,在 template 中使用 userinfo.nickname 的时候报 Cannot read property nickname
没有找到原因,console.log() 或者是 <template>{{userinfo}}</template> 是正常输出,并且是 Object 没问题,但是如果用 <template>{{userinfo.nickname}}</template>的时候直接就 Cannot read property nickname
没有找到原因,查过 Google 没有什么收获。
感觉上不是 SSR 的问题,我用循环这个 object 或者直接调都可以全部输出,但是用 {{userinfo.nickname}} 就不行了。
希望有人能解惑~ 多谢
1
noe132 2018-05-02 02:45:50 +08:00 via Android 1
你的 userinfo 是 undefined。在你 beforemount 之前就调用了 userinfo。
加个判断就行了。 |
2
SP00F OP @noe132 #1
多谢回复, 意味着在 beforemount 的时候需要再次调用 Vuex 获取 localStorage 存储 userinfo 吗? 但是刷新加载页面后输出整个 userinfo 是没问题的,调用 userinfo.nickname 就会报错。 |
3
POPOEVER 2018-05-02 03:05:38 +08:00 1
localStorage 里是字符串吧,读成对象要 JSON.parse() 的吧
|
4
SP00F OP |
5
ss098 2018-05-02 03:12:59 +08:00 via Android 1
你要把 userinfo 的默认值设为 {}。
|
6
POPOEVER 2018-05-02 03:17:22 +08:00
console.log 出来的结果在开发工具里是会异步更新的,所以你得用 vue 的开发工具来调试,看 localStorage 的数据读取是否是在 template 加载前完成,再不济就用 callback 调呗
P.S, 不好意思,我玩 Angular 的,不过道理应该一样的吧 :P |
7
SP00F OP |