Хотя Vue и React имеют много общего, между ними существуют фундаментальные различия в философии, архитектуре и подходах к разработке. Рассмотрим основные аспекты, где эти фреймворки расходятся.
Vue:
<template>
<div v-if="show">Hello {{ name }}</div>
</template>
React:
function Component() {
return show ? <div>Hello {name}</div> : null;
}
Vue:
data() {
return { count: 0 }
},
methods: {
increment() {
this.count++ // Автоматически реактивно
}
}
React:
const [count, setCount] = useState(0);
const increment = () => setCount(c => c + 1); // Явное обновление
Vue:
<input v-model="text" ref="input">
<button @click="submit">Submit</button>
React:
const inputRef = useRef(null);
<input ref={inputRef} onChange={e => setText(e.target.value)} />
<button onClick={submit}>Submit</button>
Vue:
export default {
data() {
return { x: 0 }
},
methods: {
move() { /* ... */ }
}
}
React:
function useMovement() {
const [x, setX] = useState(0);
const move = () => { /* ... */ };
return { x, move };
}
Vue:
React:
Vue:
React:
Vue:
<style scoped>
.button { color: red }
</style>
React:
const styles = { color: 'red' };
<div style={styles} />
Задача: Форма с валидацией
Vue решение:
<template>
<form @submit.prevent="submit">
<input v-model="email" @blur="validate">
<span v-if="error">{{ error }}</span>
<button :disabled="!isValid">Submit</button>
</form>
</template>
<script>
export default {
data() {
return { email: '', error: '' }
},
computed: {
isValid() {
return this.email && !this.error
}
},
methods: {
validate() { /* ... */ },
submit() { /* ... */ }
}
}
</script>
React решение:
function Form() {
const [email, setEmail] = useState('');
const [error, setError] = useState('');
const isValid = email && !error;
const validate = () => { /* ... */ };
const submit = e => {
e.preventDefault();
/* ... */
};
return (
<form onSubmit={submit}>
<input
value={email}
onChange={e => setEmail(e.target.value)}
onBlur={validate}
/>
{error && <span>{error}</span>}
<button disabled={!isValid}>Submit</button>
</form>
);
}
Vue предлагает более структурированный и декларативный подход с акцентом на шаблоны и встроенные директивы, тогда как React дает больше свободы через JavaScript и требует более явного управления состоянием. Vue проще для новичков, React предоставляет больше гибкости опытным разработчикам. Выбор между ними часто зависит от предпочтений команды и специфики проекта.