最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Vue 3: `defineProps` are referencing locally declared variables

2022-07-27 19:06 作者:星光免兔  | 我要投稿

錯誤內(nèi)容如下:[plugin:vite:vue] [@vue/compiler-sfc] `defineProps()` in <script setup> cannot reference locally declared variables because it will be hoisted outside of the setup() function. If your component options require initialization in the module scope, use a separate normal <script> to export the options instead.

這個其實是一個警告

今天遇到一種情況,在setup script 里定義了props,而props里的一個屬性是一個方法,想定義一個默認的方法。默認的方法里要用到this(instance)或者props本身,但是怎么寫都會出現(xiàn)上圖的警告。

不得了,搜索了一下。這個問題似乎是vue本身引起,代碼的邏輯的思維是沒有問題。那么記錄一下錯誤的原因:

當我們使用script setup的時候,其實是編譯器幫我們把代碼編譯回去setup的方法,類似我們在defineComponent里寫setup方法,所以setup本身是一個獨立的作用域(setup scope)。

而vue組件本身是一個js文件,也就是script方法里也是一個作用域(module scope)。

也就是說一個vue組件其實同時具備了兩個作用域。

因此,在defineProps里定義default函數(shù)的時候不應該引用setup作用域的變量。

因為props本身應該是屬于module scope,跟setup是同級的。

props與setup之間的關系

明白了原因之后,就可以找到解決的辦法。

首先是錯誤的代碼:

解決辦法1:

import引用的時候,變量是定義在module scope的,因此在同一個作用域。

解決辦法2:

把變量定義在script里,這樣也是定義在module scope上。


結語:setup script是一個極好的語法糖,提高了語法效率,但是因此引起的作用域問題會讓新人感覺優(yōu)點莫名其妙。而這些問題往往在官網(wǎng)上是沒有詳細的記錄。最后只能靠大家寫下來的資料。但是,如果對作用域的理解沒有到位,可能會感覺到有點莫名其妙。如果不理解作用域,只是使用解決辦法的話,后面恐怕寫代碼時又會遇到問題,不能隨心所欲。因此,這個問題本身是作用域的問題,希望遇到同樣問題的小伙伴們,好好理解一下作用域本身。

Vue 3: `defineProps` are referencing locally declared variables的評論 (共 條)

分享到微博請遵守國家法律
香河县| 南丹县| 佛坪县| 沙田区| 民权县| 武川县| 开江县| 同心县| 绥宁县| 和平区| 略阳县| 城市| 无棣县| 娄烦县| 利川市| 酒泉市| 宁都县| 内黄县| 贺兰县| 白银市| 通海县| 东乡| 灌南县| 五指山市| 浑源县| 泰州市| 察哈| 永济市| 承德市| 静海县| 叙永县| 旬阳县| 广昌县| 浦江县| 同江市| 林口县| 银川市| 尖扎县| 象山县| 炉霍县| 镇平县|