詳解在Vue組件中的data為何只能回傳函數
透過Vue建構器傳入的各種選項大多都可以在元件裡用,唯獨只有data選項有差別,在Vue建構器中data回傳的是對象,但是在組成中必須傳回一個函式。 why?這篇文章主要介紹了詳解在Vue組件中的data為什麼只能返回函數,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看
先來看下面一個例子:
HTML:<p id="example-2"> <simple-counter></simple-counter> <simple-counter></simple-counter> <simple-counter></simple-counter></p>JS:var data = { counter: 0 } Vue.component('simple-counter', { template: '<button v-on:click="counter += 1">{{ counter }}</button>', // 技术上 data 的确是一个函数了,因此 Vue 不会警告, // 但是我们返回给每个组件的实例的却引用了同一个data对象 data : data})new Vue({ el: '#example-2'})
这段代码本来的想法是,点击某个按钮然后那个按钮的值加一,但是因为所有按钮都使用同一个counter值,导致每次点击一个按钮,其他按钮的只也会加一,这是不允许的,每个组件模板不应该相互影响。 那么如何解决这个问题呢? 我们可以通过为每个组件返回全新的 data 对象来解决这个问题,例如:
data: function () { return { counter: 0 } }
那这个其中原理是什么? 这个其实不关Vue的事情,这是js本身的一种特性造成的。当两个实例继承同一个对象的时候么当你修改其中一个属性的时候,另外一个实例也会跟着改。例如:
var MyComponent = function() {} MyComponent.prototype.data = { a: 1, b: 2, }var component1 = new MyComponent()var component2 = new MyComponent() component1.data.a === component2.data.a // truecomponent1.data.b = 5component2.data.b // 5
這是js繼承機制決定的,不懂的童鞋可以看我另一篇關於js繼承的文章
總結:
其實ES5繼承是非常噁心的,所以ES6對於繼承做了改進,引進了class, extends, super概念,想了解的童鞋去了解一下吧
相關推薦:
以上是詳解在Vue組件中的data為何只能回傳函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

使用vue框架開發前端專案時,我們部署的時候都會部署多套環境,往往開發、測試以及線上環境呼叫的介面網域都是不一樣的。如何能做到區分呢?那就是使用環境變數和模式。

Ace 是一個用 JavaScript 寫的可嵌入程式碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和效能相符。它可以很容易地嵌入到任何網頁和 JavaScript 應用程式中。 Ace 被維護為Cloud9 IDE的主要編輯器 ,並且是 Mozilla Skywriter (Bespin) 專案的繼承者。

組件化和模組化的區別:模組化是從程式碼邏輯的角度進行劃分的;方便程式碼分層開發,確保每個每個功能模組的職能一致。元件化是從UI介面的角度進行規劃;前端的元件化,方便UI元件的重複使用。

在當今前端開發中,Vue.js 已經成為了一個非常流行的框架。隨著 Vue.js 的不斷發展,單元測試變得越來越重要。今天,我們將探討如何在 Vue.js 3 中編寫單元測試,並提供一些最佳實踐和常見的問題及解決方案。

前言:在vue3的開發中,reactive是提供實現響應式資料的方法。日常開發這個是使用頻率很高的api。這篇文章筆者就來探索其內部運作機制。

在Vue.js中,開發人員可以使用兩種不同的語法來建立使用者介面:JSX語法和範本語法。這兩種文法各有優劣,以下就來探討它們的差異和優劣勢。

在實際開發專案過程中有時候需要上傳比較大的文件,然後呢,上傳的時候相對來說就會慢一些,so,後台可能會要求前端進行文件切片上傳,很簡單哈,就是把比如說1個G的檔案流切割成若干個小的檔案流,然後分別請求介面傳遞這個小的檔案流。
