广告
返回顶部
首页 > 资讯 > 精选 >vue中使用three.js报错怎么办
  • 756
分享到

vue中使用three.js报错怎么办

2023-06-29 09:06:51 756人浏览 八月长安
摘要

小编给大家分享一下Vue中使用three.js报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言最近在学习three.js,同时也学习一下vue3,然后

小编给大家分享一下Vue中使用three.js报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言

最近在学习three.js,同时也学习一下vue3,然后就出现问题了,报错直接用不了,错误信息如下:

vue中使用three.js报错怎么办

Uncaught TypeError: 'get' on proxy: property 'modelViewMatrix' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expected '#' but Got '[object Object]')

这个是什么鬼???相信大家都把错误信息复制到百度搜了一下解决方案吧?遇到问题的人并不多,解决方案就是把scene、mesh 啥的放到全局变量中,不放到data中,好的问题解决了。

我这样写是不是有点水文的嫌疑?作为一个成熟的程序员怎么能水文呢?我得找到为什么会出现这个问题才行,于是我花了两个小时找到问题所在,也是怪自己不够专业,不然应该花不了两个小时。

1. vue的问题?

众所周知,vue3是通过Proxy实现的数据双向绑定,vue2是通过defindeProperty实现的数据双向绑定,vue2的源码我也看过,应该也是会有这个问题的,因为在开发模式下面,如果浏览器支持Proxy还是会用Proxy,我没有用vue2去尝试,大家可以自行去尝试,不出意外也会有这个问题。
上面说了一堆,就是为了引出Proxy的异常情况,好了又可以学习一下Proxy的知识了

2. Proxy的异常情况

在使用Proxy时,当属性存在属性特性configurable: false, value: undefined,时,则取其属性值时会报错:

const handle = {  get() {    return 1;  },};const obj = Object.create(null);Object.defineProperty(obj, 'a', {  configurable: false,});Object.defineProperty(obj, 'b', {  value: undefined,});Object.defineProperty(obj, 'c', {  configurable: true,  value: 'c',});const proxy = new Proxy(obj, handle);console.log(proxy.a); // 报错TypeError: 'get' on proxy: property 'a' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expected 'undefined' but got '1')console.log(proxy.b); // 报错Uncaught TypeError: 'get' on proxy: property 'b' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expected 'undefined' but got '1')console.log(proxy.c); // 1

看看上面的报错,是不是很熟悉?这样看是不是一下就知道是什么问题了?

3. Three.js 的问题

this.scene = new Scene();this.scene.modelViewMatrix;

直接运行上面的代码,就会看到文首出现的错误,错误原因就是因为configurable设置为false,找到问题就要解决问题,是不是觉得直接使用defineProperty就可以解决了?
很抱歉,这个不行,再来学习一下defineProperty。

4. defineProperty异常情况

MDN中是这样描述的

如果属性已经存在,Object.defineProperty()将尝试根据描述符中的值以及对象当前的配置来修改这个属性。如果旧描述符将其configurable 属性设置为false,则该属性被认为是“不可配置的”,并且没有属性可以被改变(除了单向改变 writable 为 false)。当属性不可配置时,不能在数据和访问器属性类型之间切换。
当试图改变不可配置属性(除了 value 和 writable 属性之外)的值时,会抛出TypeError,除非当前值和新值相同。

也就是说之前定义了configurable为false,就不能再将configurable改为true了,那怎么办?我说了问题当然是要给你解决的。

5. 解决

之前在网上查了,全局变量来处理,但是我使用的vue啊,我当然是希望将它定义到data中的,但是定义到data中就会自动生成代理,那就只能从源码入手了。 我也就不讲我是怎么去找源码的,我直接上解决之后的吧,在node_modules\three\build\three.module.js这个文件中,第7392行,里面的代码如下:

Object.defineProperties( this, { position: {  configurable: true,  enumerable: true,  value: position }, rotation: {  configurable: true,  enumerable: true,  value: rotation }, quaterNIOn: {  configurable: true,  enumerable: true,  value: quaternion }, scale: {  configurable: true,  enumerable: true,  value: scale }, modelViewMatrix: {  value: new Matrix4() }, nORMalMatrix: {  value: new Matrix3() }} );

看到了吧,里面有一个modelViewMatrix属性,它没有设置configurable属性描述,也就是默认为false,加上就好了,改好了如下:

Object.defineProperties( this, { position: {  configurable: true,  enumerable: true,  value: position }, rotation: {  configurable: true,  enumerable: true,  value: rotation }, quaternion: {  configurable: true,  enumerable: true,  value: quaternion }, scale: {  configurable: true,  enumerable: true,  value: scale }, modelViewMatrix: {  configurable: true,  value: new Matrix4() }, normalMatrix: {  value: new Matrix3() }} );

然后重启服务,就不会报错了,当然这种方式是有缺陷的,因为改了只是你本地的,你其他同事的代码并没有改,如果要升级three.js也会把改了的代码重新覆盖,同时也不知道为什么three.js要这样处理这个变量,这个就看自己是怎么处理的,我这次只处理这个问题。

以上是“vue中使用three.js报错怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: vue中使用three.js报错怎么办

本文链接: https://www.lsjlt.com/news/324036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue中使用three.js报错怎么办
    小编给大家分享一下vue中使用three.js报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言最近在学习three.js,同时也学习一下vue3,然后...
    99+
    2023-06-29
  • 关于vue中使用three.js报错的解决方法
    目录前言1. vue的问题?2. Proxy的异常情况3. Three.js 的问题4. defineProperty异常情况5. 解决总结前言 最近在学习three.js,同时也学...
    99+
    2022-11-13
  • Vue+Typescript中在Vue上挂载axios使用时报错怎么办
    这篇文章将为大家详细讲解有关Vue+Typescript中在Vue上挂载axios使用时报错怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在vue项目开发过程中,为...
    99+
    2022-10-19
  • vue的空格报错怎么办
    本教程操作环境:Windows10系统、Vue 3版、Dell G3电脑。vue的空格报错怎么办?vue空格报错搭建了一个vue项目,在配置路有的时候,陆续出现了各种报错其中最多的是一些写法,例如空格,缩进,各种括号,结果我一句一句对照,修...
    99+
    2023-05-14
    Vue
  • vue打包刷新报错怎么办
    本教程操作环境:Windows10系统、Vue 3版、Dell G3电脑。vue打包刷新报错怎么办?vue项目部署后刷新报404 解决方法一、原因因之前vue搭建的项目的vue router mode 使用的默认模式hash,项目打包部署...
    99+
    2023-05-14
    打包 Vue
  • vue二级路由报错怎么办
    本教程操作环境:Windows10系统、Vue 3版、Dell G3电脑。vue二级路由报错怎么办?vue中二级路由跳转不成功的一个原因二级路由有具体的路径时前面不加斜杠/vue二级路由不显示页面bug如果父路由path是 / 则redir...
    99+
    2023-05-14
    Vue
  • 安装vue-cli报错-4058怎么办
    这篇文章主要为大家展示了“安装vue-cli报错-4058怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“安装vue-cli报错-4058怎么办”这篇文章吧...
    99+
    2022-10-19
  • vue部署编译报错怎么办
    Vue.js是一款流行的JavaScript框架,用于构建现代Web应用程序。它具有可组合的架构,强大的工具集和活跃的开源社区。但在使用Vue.js时,开发者可能会遇到各种问题,其中的一个常见问题是部署时编译报错。部署Vue.js应用程序可...
    99+
    2023-05-14
  • vue中配置mint-ui报css错误怎么办
    这篇文章主要介绍了vue中配置mint-ui报css错误怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在vue2.0中引入了mint-...
    99+
    2022-10-19
  • vue中语法规则检测报错怎么办
    这篇文章主要介绍了vue中语法规则检测报错怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主要报错如下:截取了一段常见报错,选取其中一个...
    99+
    2022-10-19
  • vue.js中使用运算符报错怎么办
    这篇文章主要介绍vue.js中使用运算符报错怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!报错如下这个错误是,项目中不识别es6的扩展运算符, 解决方式很简单。// ...
    99+
    2022-10-19
  • vue报错找不到图片怎么办
    本教程操作环境:windows7系统、vue3、Dell G3电脑。vue报错找不到图片怎么办?vue中图片加载不出来的问题及解决在使用vue开发项目的时候,经常会遇到的一个问题就是:图片加载不出来。下面是我总结的几种图片加载不出来的情况及...
    99+
    2022-11-22
    图片 Vue
  • vue引入静态jquery报错怎么办
    本教程操作环境:Windows10系统、jquery3.2.1版、DELL G3电脑vue引入静态jquery报错怎么办?关于vue中引用jquery报错vue项目中需要使用jquery时,我们可能安装了jquery还是会提示报错,如何解决...
    99+
    2023-05-14
    jQuery Vue
  • 使用OpenCV中的imread()内存报错怎么办
    这篇文章给大家分享的是有关使用OpenCV中的imread()内存报错怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。错误截图如下:类似报错的原因1.imread()中的路径参数有误a.相对路径:此项目文件夹...
    99+
    2023-06-14
  • idea编译器vue缩进报错怎么办
    这篇文章主要介绍了idea编译器vue缩进报错怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。项目场景:在运行Vue项目时,出现了缩进报错的问题,我是使用idea 的编译...
    99+
    2023-06-20
  • mysql中GTID报错怎么办
    这篇文章主要介绍了mysql中GTID报错怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 在master 上删除一条记录,而sla...
    99+
    2022-10-18
  • Layui中layer报错怎么办
    这篇文章主要介绍Layui中layer报错怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题描述:Uncaught ReferenceError: layer is not d...
    99+
    2022-10-19
  • php中imagepng报错怎么办
    这篇文章主要为大家展示了“php中imagepng报错怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中imagepng报错怎么办”这篇文章吧。php imagepng报错是因为Ima...
    99+
    2023-06-20
  • CentOS7使用exp/imp时报错怎么办
    这篇文章给大家分享的是有关CentOS7使用exp/imp时报错怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在CentOS7下使用exp语句导出数据时遇到报错,使用的脚本...
    99+
    2022-10-18
  • Jupyter Notebook内使用argparse报错怎么办
    小编给大家分享一下Jupyter Notebook内使用argparse报错怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Jupyter Notebook内使用argparse报错在github上下载了代码来学习时,...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作