


How do ref and reactive differ when defining reactive state in Vue's Composition API?
Jun 19, 2025 am 12:44 AMIn Vue 3 Composition API, ref is used to manage primitive types or responsive state that need to be maintained with variable references and accessed through .value; reactive is more suitable for objects that combine multiple responsive properties without .value. 1. ref supports reassignment and remains responsive, while reactive loses responsiveness after reassignment. 2. When used in a template, ref can be automatically unpacked, while reactive will lose its responsiveness after deconstruction and needs to be used with toRefs. 3. In terms of performance, reactive is more efficient for complex objects, but usually has little difference. Just choose according to your needs.
When working with Vue's Composition API, especially in Vue 3, you'll often come across ref
and reactive
for managing reactive state. While they both help track changes and update the UI accordingly, they're not interchangeable — each has its own use case and behavior.
Here's how they differ and when to choose one over the other.
1. Basic Usage and Value Types
-
ref
is best for:- Primitive values ??(
string
,number
,boolean
) - When you need to keep a reference to a value that might change
- Keeping reactivity across function boundaries or loops
- Primitive values ??(
You access and modify it using .value
:
const count = ref(0) count.value
-
reactive
works well for:- Objects (including arrays and nested objects)
- Grouping related reactive data together in a single object
You use it directly without .value
:
const state = reactive({ count: 0 }) state.count
The main takeaway here is:
Use ref
when dealing with primitives or needing a mutable reference. Use reactive
when grouping multiple reactive properties into an object.
2. Reassignment Behavior Matters
This is a subtle but important difference.
If you have a ref
, you can safely reassign it to another value and still retain reactivity:
let count = ref(0) count = ref(10) // Still reactive
But with reactive
, if you reassign the variable, it loses reactive:
let state = reactive({ count: 0 }) state = reactive({ count: 10 }) // Reactivity lost on the new assignment
So, if you plan to completely replace the value later, ref
is safe.
3. Template Usage and Destructuring Gotchas
In templates, ref
automatically unwraps, so you don't need .value
. That makes them convenient:
<template> <div>{{ count }}</div> </template> <script setup> const count = ref(5) </script>
But if you destroy a reactive
object, the destroyed variables lose reactive:
const state = reactive({ count: 0, name: 'Vue' }) const { count } = state // ? Not reactive anymore
To fix this, you'd need to use toRefs
:
const state = reactive({ count: 0, name: 'Vue' }) const { count } = toRefs(state) // ? Now count is a ref
So, if you're planning to destroy your state, ref
or toRefs
are better choices.
4. Performance Considerations (Slight Edge)
Under the hood, reactive
uses Proxy
, while ref
wraps the value in an object with a .value
property. This means reactive
may be slightly more performant for large, complex objects since it doesn't require wrapping every property in a ref.
However, unless you're dealing with very large datasets or performance-critical code, the difference is negligible.
So which should you use?
- Prefer
ref
for primitives and when flexibility with reassignment matters. - Go with
reactive
when grouping related state into an object and you don't need to destroy.
They both do similar jobs but behave differently in edge cases.
Basically that's it.
The above is the detailed content of How do ref and reactive differ when defining reactive state in Vue's Composition API?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

React itself does not directly manage focus or accessibility, but provides tools to effectively deal with these issues. 1. Use Refs to programmatically manage focus, such as setting element focus through useRef; 2. Use ARIA attributes to improve accessibility, such as defining the structure and state of tab components; 3. Pay attention to keyboard navigation to ensure that the focus logic in components such as modal boxes is clear; 4. Try to use native HTML elements to reduce the workload and error risk of custom implementation; 5. React assists accessibility by controlling the DOM and adding ARIA attributes, but the correct use still depends on developers.

WebAssembly(WASM)isagame-changerforfront-enddevelopersseekinghigh-performancewebapplications.1.WASMisabinaryinstructionformatthatrunsatnear-nativespeed,enablinglanguageslikeRust,C ,andGotoexecuteinthebrowser.2.ItcomplementsJavaScriptratherthanreplac

Server-siderendering(SSR)inNext.jsgeneratesHTMLontheserverforeachrequest,improvingperformanceandSEO.1.SSRisidealfordynamiccontentthatchangesfrequently,suchasuserdashboards.2.ItusesgetServerSidePropstofetchdataperrequestandpassittothecomponent.3.UseSS

Immutable updates are crucial in React because it ensures that state changes can be detected correctly, triggering component re-rendering and avoiding side effects. Directly modifying state, such as push or assignment, will cause React to be unable to detect changes. The correct way to do this is to create new objects instead of old objects, such as updating an array or object using the expand operator. For nested structures, you need to copy layer by layer and modify only the target part, such as using multiple expansion operators to deal with deep attributes. Common operations include updating array elements with maps, deleting elements with filters, adding elements with slices or expansion. Tool libraries such as Immer can simplify the process, allowing "seemingly" to modify the original state but generate new copies, but increase project complexity. Key tips include each

Front-end applications should set security headers to improve security, including: 1. Configure basic security headers such as CSP to prevent XSS, X-Content-Type-Options to prevent MIME guessing, X-Frame-Options to prevent click hijacking, X-XSS-Protection to disable old filters, HSTS to force HTTPS; 2. CSP settings should avoid using unsafe-inline and unsafe-eval, use nonce or hash and enable reporting mode testing; 3. HTTPS-related headers include HSTS automatic upgrade request and Referrer-Policy to control Referer; 4. Other recommended headers such as Permis

The data-* attribute is used in HTML to store additional data, and its advantages include that the data is closely related to elements and comply with HTML5 standards. 1. When using it, name it starts with data-, such as data-product-id; 2. It can be accessed through JavaScript's getAttribute or dataset; 3. Best practices include avoiding sensitive information, reasonable naming, paying attention to performance and not replacing state management.

To style SVGs using CSS, you first need to embed SVGs inline into HTML for fine control. 1. Inline SVG allows its internal elements such as or to be directly selected through CSS and to apply styles, while external SVG only supports global styles such as width and height or filters. 2. Use regular CSS syntax such as .class:hover to achieve interactive effects, but use fill instead of color to control the color, and use stroke and stroke-width to control the outline. 3. Use class names to organize styles to avoid duplication and pay attention to naming conflicts and scope management. 4. The SVG style may be inherited from the page, and can be reset through svg*{fill:none;stroke:none;} to avoid

Adding website Favicon requires preparing icon files, placing the correct path and quoting them. 1. Prepare multi-size .ico or .png icons, which can be generated by online tools; 2. Put favicon.ico in the website root directory; 3. If you need to customize the path or support more devices, you need to add a link tag reference in the HTMLhead; 4. Clear the cache or use the tool to check whether it is effective.
