V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
eccentric579
V2EX  ›  Vue.js

刚刚接触 vue 麻烦问一个 bug

  •  
  •   eccentric579 · Nov 1, 2021 · 2692 views
    This topic created in 1651 days ago, the information mentioned may be changed or developed.

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

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

    谢谢

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

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

    哎,我以为 axios 会阻塞的,结果和 computed() 是并行的。
    突然就想通了。
    谢谢
    DoveAz
        6
    DoveAz  
       Nov 2, 2021
    ```javascript
    movielist.value[focus.value]?.pic??['you','wrong']
    ```
    gadfly3173
        7
    gadfly3173  
       Nov 2, 2021
    @eccentric579 axios 本来就是异步的返回 promise 呀。同步获取数据可以用 async await 把它阻塞掉,但是 mounted 这些生命周期只是钩子,只是控制执行的时间,所以在生命周期钩子里更新的数据也不会同步的。不过你既然已经知道了会有什么属性,其实可以直接给 data 设默认值的
    eccentric579
        8
    eccentric579  
    OP
       Nov 2, 2021
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   883 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 20:14 · PVG 04:14 · LAX 13:14 · JFK 16:14
    ♥ Do have faith in what you're doing.