V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eccentric579
V2EX  ›  Vue.js

刚刚接触 vue 麻烦问一个 bug

  •  
  •   eccentric579 · 2021-11-01 22:32:32 +08:00 · 2155 次点击
    这是一个创建于 1118 天前的主题,其中的信息可能已经有所发展或是发生改变。

    屏幕截图 2021-11-01 223023.png

    获取.url .pic 总是提示访问未定义对象

    谢谢

    8 条回复    2021-11-02 22:49:24 +08:00
    wildnode
        1
    wildnode  
       2021-11-01 22:43:02 +08:00
    在 onMounted 里的请求完成之前,movielist.value[focue.value] 本身就是 undefined
    相当于你在访问 undefined.pic 和 undefined.url

    而且你那两行我没太看明白,是想给 picquery 和 urlquery 赋默认值么,那也应该是用 || 而不是 && 啊...
    wildnode
        2
    wildnode  
       2021-11-01 22:44:39 +08:00
    不对,用 || 也不优雅,应该在 computed 中判断数据是否存在,如果不存在就返回默认值
    eccentric579
        3
    eccentric579  
    OP
       2021-11-01 23:27:58 +08:00
    @wildnode
    用 || 和 什么都不加 ,都过不了 render
    用&& 倒是可以运行
    我也没想清楚为什么会这样
    Vegetable
        4
    Vegetable  
       2021-11-01 23:36:17 +08:00
    computed() && literal 这操作也令人费解了,这样你的 picquery 和 urlquery 究竟是啥啊,我都说不准了,吧&& 写道 computed 里边,然后?.pic 和?.url 就解决了
    eccentric579
        5
    eccentric579  
    OP
       2021-11-02 01:13:18 +08:00
    @wildnode

    哎,我以为 axios 会阻塞的,结果和 computed() 是并行的。
    突然就想通了。
    谢谢
    DoveAz
        6
    DoveAz  
       2021-11-02 09:33:17 +08:00
    ```javascript
    movielist.value[focus.value]?.pic??['you','wrong']
    ```
    gadfly3173
        7
    gadfly3173  
       2021-11-02 16:13:33 +08:00
    @eccentric579 axios 本来就是异步的返回 promise 呀。同步获取数据可以用 async await 把它阻塞掉,但是 mounted 这些生命周期只是钩子,只是控制执行的时间,所以在生命周期钩子里更新的数据也不会同步的。不过你既然已经知道了会有什么属性,其实可以直接给 data 设默认值的
    eccentric579
        8
    eccentric579  
    OP
       2021-11-02 22:49:24 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:14 · PVG 00:14 · LAX 08:14 · JFK 11:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.