首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新数据值时,Nuxt SSR中断

更新数据值时,Nuxt SSR中断
EN

Stack Overflow用户
提问于 2021-12-28 18:05:43
回答 1查看 215关注 0票数 0

目前,在nuxt中有一个应用程序,在某些情况下,当我加载页面时,在控制台中得到这个错误,页面就会简单地消失,它就会停止加载所有其他组件。

代码语言:javascript
运行
复制
Cannot read properties of undefined (reading 'resolved')

这是错误的调用堆栈。

代码语言:javascript
运行
复制
_callee$    @   4995173.js:7609
tryCatch    @   1a976f9.js:10241
invoke  @   1a976f9.js:10471
(anonymous) @   1a976f9.js:10296
asyncGeneratorStep  @   bd976e3.js:135
_next   @   bd976e3.js:157
(anonymous) @   bd976e3.js:164
(anonymous) @   bd976e3.js:153
(anonymous) @   4995173.js:7621
globalHandleError   @   1a976f9.js:1724
handleError @   1a976f9.js:1693
(anonymous) @   1a976f9.js:1834
flushCallbacks  @   1a976f9.js:1758
Promise.then (async)        
timerFunc   @   1a976f9.js:1785
nextTick    @   1a976f9.js:1842
Vue.$nextTick   @   1a976f9.js:3198
mounted @   3d9c3ba.js:2783
invokeWithErrorHandling @   1a976f9.js:1708
callHook    @   1a976f9.js:3832
insert  @   1a976f9.js:2843
invokeInsertHook    @   1a976f9.js:5806
patch   @   1a976f9.js:5937
Vue._update @   1a976f9.js:3595
updateComponent @   1a976f9.js:3683
get @   1a976f9.js:4069
Watcher @   1a976f9.js:4058
mountComponent  @   1a976f9.js:3690
push.Vue.$mount @   1a976f9.js:7826
mount   @   4995173.js:8426
_callee6$   @   4995173.js:8474
tryCatch    @   1a976f9.js:10241
invoke  @   1a976f9.js:10471
(anonymous) @   1a976f9.js:10296
asyncGeneratorStep  @   bd976e3.js:135
_next   @   bd976e3.js:157
Promise.then (async)        
asyncGeneratorStep  @   bd976e3.js:145
_next   @   bd976e3.js:157
Promise.then (async)        
asyncGeneratorStep  @   bd976e3.js:145
_next   @   bd976e3.js:157
(anonymous) @   bd976e3.js:164
(anonymous) @   bd976e3.js:153
_mountApp   @   4995173.js:8521
mountApp    @   4995173.js:8399
Promise.then (async)        
(anonymous) @   4995173.js:7631
661 @   4995173.js:8523
__webpack_require__ @   01d6f59.js:85
660 @   4995173.js:7384
__webpack_require__ @   01d6f59.js:85
checkDeferredModules    @   01d6f59.js:46
webpackJsonpCallback    @   01d6f59.js:33
(anonymous) @   4995173.js:1

抛出错误的代码位于函数patchVnode中的vue中,更具体地说,这里的条件是:

代码语言:javascript
运行
复制
if (isTrue(oldVnode.isAsyncPlaceholder)) {
  if (isDef(vnode.asyncFactory.resolved)) {
    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
  } else {
    vnode.isAsyncPlaceholder = true;
  }
  return
}

这是它的调用堆栈

代码语言:javascript
运行
复制
TypeError: Cannot read properties of undefined (reading 'resolved')
    at patchVnode (1a976f9.js:5746)
    at updateChildren (1a976f9.js:5655)
    at patchVnode (1a976f9.js:5781)
    at updateChildren (1a976f9.js:5655)
    at patchVnode (1a976f9.js:5781)
    at updateChildren (1a976f9.js:5655)
    at patchVnode (1a976f9.js:5781)
    at updateChildren (1a976f9.js:5655)
    at patchVnode (1a976f9.js:5781)
    at VueComponent.patch [as __patch__] 

由于某些原因,vNodetrue中具有属性isAsyncPlaceholder,但asyncFactory不存在,处于未定义状态,在试图访问属性resolved时抛出错误。对于我可以在代码中进行的研究,当我更新一个属性值并且一些计算的属性使用该值时,似乎会发生此错误。父组件代码如下所示:

代码语言:javascript
运行
复制
data() {
  return {
    loadingResults: false
  };
},
computed() {
  showLoading() {
    return this.loadingResults && this.someOtherCondition && this.someOtherCondition;
  }
}
mounted() {
  this.search();
},
methods: {
  search() {
    this.loadingResults = true;
  }
}

如果我在计算属性中注释部分this.loadingResults = true;loadingResults,则错误不再出现,页面将完全加载(这就是为什么我说更改这个值会导致错误),但这不是一个合适的解决方案。另外,另一种解决方案是封装将错误抛入<client-only>标记的组件,但这会增加我的LCP,而且我不想用标记修复它。现在我真的不知道该如何解决这个问题,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-08-05 17:04:21

我有一个类似的错误,我通过将动态组件导入更改为静态导入来修复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70510855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档