Эта серия статей будет постепенно углубляться от мелкого к более глубокому и поможет вам шаг за шагом оценить сходства и различия между react и vue, чтобы вы могли реагировать левой рукой, а Vue — правой.
Предпосылки для рассмотрения:
Написал vue очередь реагировать товарищи (1)
Напишите товарищам, которые конвертируют vue в реакцию (2)
Напишите товарищам, которые переходят с vue на react (3)
По просьбам мастеров эта статья начинает охватыватьhooks, эта бумага будетvue3а такжеreact 17.x(hooks)Сравните и почувствуйте сходства и различия между двумя фреймворками.
Сегодняшняя тема:
- vue3 и реагировать на определение и изменение данных
Vue3 и React Cloots Определения и изменение данных
На самом деле оба предвзятыhooksСпособ написания, такая очень гибкая комбинация, я думаю, что большинство людей все еще находят ее ароматной, будь то предыдущаяvue optionsилиreact classМетоды письма относительно раздуты и менее пригодны для повторного использования (по сравнению сhooks). Ниже приведен пример для сравнения.
vue3
<template>
<div>
<p @click='setObj'>age: {{obj.age}}</p>
<p>sex: {{obj.sex}}</p>
</div>
</template>
<script>
import { reactive } from 'vue'
export default {
setup() {
const obj = reactive({
age: 25,
sex: 'man'
})
function setObj() {
obj.age ++
}
return {
obj,
setObj
}
}
}
</script>
react
import { useState } from 'react';
function App() {
const [todos, setTodos] = useState({
age: 25,
sex: 'man'
})
const setObj = () => {
setTodos({
...todos,
age: todos.age + 1
})
}
return (
<div>
<p onClick={setObj}>{todos.age}</p>
<p>{todos.sex}</p>
</div>
);
}
Сравнивая приведенный выше код, мы видим, чтоvue3а такжеreact hooksОсновное написание аналогично, ноvueпродвигатьtemplateПишу,reactпродвигатьjsxПравило именования, шаблон не влияет на васjsИспользуется логика, поэтому независимо от фреймворка, как изменить,jsЭто также наша передняя железная чаша для риса, пожалуйста, обязательно освойте ее!
vue3 и реагировать на вычисляемые свойства
Назначение свойства вычисляемого состоит в том, чтобы помешать нам писать слишком сложные операции над шаблоном, что и является значением свойства вычисляемого.vue3предоставлено вcomputedметод,react hookпри условииuseMemoДавайте реализуем вычисляемые свойства (нотация класса не может использоватьсяgetПодробнее о реализации вычисляемых свойств см. в предыдущих статьях)
vue3
<template>
<div>
<p>age: {{obj.age}}</p>
<p>sex: {{obj.sex}}</p>
<p>info: {{people}}</p>
</div>
</template>
<script>
import { reactive, computed } from 'vue'
export default {
setup() {
const obj = reactive({
age: 25,
sex: 'man'
})
const people = computed(() => {
return `this people age is ${obj.age}, sex is ${obj.sex}`
})
return {
obj,
people
}
}
}
</script>
react
import { useMemo, useState } from 'react'
function App() {
const [obj, setObj] = useState({
age: 25,
sex: 'man'
})
const people = useMemo(() => {
return `this people age is ${obj.age} and sex is ${obj.sex}`
}, [obj])
return (
<div>
<p>age: {obj.age}</p>
<p>sex: {obj.sex}</p>
<p>info: {people}</p>
</div>
)
}
Видно, что вычислительные свойства двух фреймворков сравниваются, за исключением того, что написание шаблона немного отличается, а другие основные сходства есть у обоих.hooksМетод написания заключается в реализации операции через метод, представленный внутри фреймворка, чтобы было удобнее отслеживать и находить ошибки.hooks
существуетvue3внутриwatchОн подвергается предложению, проходящей в параметрах соответствующего слушателя и функции обратного вызова.reactАналогичная функция есть и вuseEffect, на самом деле он иcomponentDidMount,componentDidUpdate а также componentWillUnmountИмеет ту же цель, просто слился в одинAPI. См. пример:
vue3
<template>
<div>
<p @click="setCount">count: {{count}}</p>
</div>
</template>
import { ref, watch } from 'vue'
export default {
setup() {
const count = ref(0)
watch(count,
(val) => {
console.log(val)
},
{ immediate: true, deep: true }
)
function setCount() {
count.value ++
}
return {
count,
setCount
}
}
}
react
import { useState, useEffect } from 'react'
function App() {
const [count, setCount] = useState(0)
const setCount = () => {
setCount(count + 1)
}
useEffect(() => {
console.log(count)
})
return (
<div>
<p onClick={setCount}>count: {count}</p>
</div>
)
}
можно увидеть,vue3Общая тенденция состоит в том, чтобыhooksДа ладно, нетрудно заметить, что независимо от того, какой фреймворк в будущем, есть большая вероятность, что он в конечном итоге перейдет кhooksЗависит от,react hooksЭто, несомненно, большое вдохновение для нас, функциональное программирование будет становиться все более и более популярным, от традиционных трех королей в древние времена.html、css、scriptМожет создать страницу для текущей компонентизации,jsТо есть страница.
Суммировать
В тренде функциональное программирование, но на самом деле существует много старых проектов, основанных наvue2.xизoptionsправописание илиreact classЕсть еще много способов его написать.Миграция и итерация этих проектов до последних - головная боль.Конечно, выбор технической системы, подходящей для существующих проектов, является самым важным.