25
Vue 3 學習之旅
進階應用

唯讀的響應式物件:readonly()

·6 分鐘閱讀·進階應用

摘要

readonly() 函數能接收一個響應式物件(由 ref 或 reactive 建立),並回傳一個唯讀的版本。這是一種保護狀態、防止被意外修改的機制。

定義與說明

readonly() 會建立一個代理物件,其所有屬性都是唯讀的。當你嘗試修改這個唯讀物件的任何屬性時,操作會失敗,並在瀏覽器控制台中顯示一條警告訊息。這在需要將內部狀態暴露給外部元件,但又不希望外部元件直接修改它時非常有用,有助於維持單向資料流。

實作範例

Vue SFC
<script setup>
import { reactive, readonly } from 'vue';

const originalState = reactive({ count: 0 });

// 建立一個唯讀版本的 state
const readOnlyState = readonly(originalState);

function modifyOriginal() {
  // 可以修改原始的 state
  originalState.count++; 
}

function modifyReadOnly() {
  // 嘗試修改唯讀 state,這會失敗並在控制台產生警告
  readOnlyState.count++;
}
</script>

<template>
  <p>Count: {{ readOnlyState.count }}</p>
  <button @click="modifyOriginal">從內部修改 (成功)</button>
  <button @click="modifyReadOnly">從外部修改 (失敗)</button>
</template>

結論

readonly() 是實現更安全狀態管理模式的關鍵工具。它透過強制數據的唯讀性,確保了狀態只能由其擁有者進行修改,讓複雜應用中的資料流動更加清晰和可預測。

readonly 唯讀 狀態保護