1.Vue?的雙向綁定:
<template><!-- 輸入框和數據自動綁定,就像連體嬰兒,一個動另一個也動 --><input v-model="message"><p>{{ message }}</p><!-- 完整表單示例 --><form><!-- 所有輸入都自動同步到數據,就像寫在紙上字自動復制一樣 --><input v-model="user.name" placeholder="姓名"><input v-model="user.age" placeholder="年齡"><textarea v-model="user.bio" placeholder="簡介"></textarea></form>
</template><script setup>
// 定義響應式數據
const message = ref('')
const user = reactive({name: '',age: '',bio: ''
})// 當輸入框值改變時:
// 1. 自動更新 message 的值
// 2. 相關的視圖自動更新
// 就像連鎖反應一樣,不需要手動處理
</script>
2.React 的單向綁定:
function App() {// 定義狀態和更新函數const [message, setMessage] = useState('')const [user, setUser] = useState({name: '',age: '',bio: ''})// 處理輸入變化const handleNameChange = (e) => {// 需要手動更新數據setUser({...user,name: e.target.value})}return (<div>{/* 輸入框的值來自 message */}{/* 當輸入時需要手動調用 setMessage 更新 */}{/* 就像傳話游戲,需要一個一個傳遞 */}<input value={message}onChange={e => setMessage(e.target.value)}/>{/* 完整表單示例 */}<form>{/* 每個輸入都需要手動處理更新 */}{/* 就像搬家,每件物品都要自己搬 */}<input value={user.name}onChange={handleNameChange}placeholder="姓名"/></form></div>)
}
3.生活中的例子
Vue 的雙向綁定就像:
- 自動門:感應到人就自動開關
- 恒溫空調:自動調節溫度
- 自動檔汽車:自動換擋
- 智能家居:一切自動化
React?的單向綁定就像:
- 普通門:需要手動開關
- 普通空調:需要手動調溫度
- 手動檔汽車:需要手動換擋
- 傳統家電:需要手動控制
4.更多實際例子:
Vue 示例(購物車):
<template><!-- 商品列表 --><div v-for="item in cart" :key="item.id"><!-- 數量輸入框自動同步到數據 --><input v-model="item.quantity" type="number"><!-- 價格自動計算 --><p>總價:{{ item.price * item.quantity }}</p></div><!-- 總價自動計算 --><p>購物車總價:{{ totalPrice }}</p>
</template><script setup>
// 購物車數據
const cart = reactive([{ id: 1, name: '蘋果', price: 5, quantity: 1 },{ id: 2, name: '香蕉', price: 3, quantity: 1 }
])// 計算總價(自動更新)
const totalPrice = computed(() => {return cart.reduce((total, item) => {return total + item.price * item.quantity}, 0)
})
</script>
React 示例(購物車):
function ShoppingCart() {// 購物車數據const [cart, setCart] = useState([{ id: 1, name: '蘋果', price: 5, quantity: 1 },{ id: 2, name: '香蕉', price: 3, quantity: 1 }])// 處理數量變化const handleQuantityChange = (id, quantity) => {// 需要手動更新整個購物車數據setCart(cart.map(item => {if (item.id === id) {return { ...item, quantity }}return item}))}// 計算總價const totalPrice = cart.reduce((total, item) => {return total + item.price * item.quantity}, 0)return (<div>{/* 商品列表 */}{cart.map(item => (<div key={item.id}>{/* 需要手動處理數量變化 */}<input type="number"value={item.quantity}onChange={e => handleQuantityChange(item.id, Number(e.target.value))}/><p>總價:{item.price * item.quantity}</p></div>))}<p>購物車總價:{totalPrice}</p></div>)
}
總結:
Vue 的特點:
- 自動同步數據和視圖
- 代碼簡潔易寫
- 不需要手動處理更新
- 適合快速開發
React?的特點:
- 需要手動處理更新
- 代碼較多但清晰
- 數據流向明確
- 適合大型項目
就像:
- Vue 是全自動洗衣機(一鍵完成)
- React?是半自動洗衣機(需要手動設置每個步驟)
選擇建議:
- 小項目、快速開發:選 Vue
- 大項目、團隊協作:選 React
- 新手入門:Vue 更友好
- 深入理解:React 更有幫助