Front-end разработка усыпана цветами, а один навык незнаком. Не знаете, с чего начать, обратите внимание на Xiaobian Shengbaishu.
Я чувствую себя очень занятым на работе в последнее время, и у меня не так много времени, чтобы писать статьи.Сегодняшняя статья в основном о моем раннем обучении.Vue3.0
Некоторые заметки, сделанные в то время, были обобщены, и, прочитав эту статью, вы сможете завершить ее самостоятельно.Vue3.0
среды, и в то же времяVue3.0
Некоторые из новых возможностей программыVue3.0
обучения. Эта статья была впервые опубликована в публичном аккаунте [Некоторые игры на фронтенде], обратите внимание===
Уилл, и многие другие ждут вас, чтобы почистить лицо вопросы о.
Во всех примерах в этой статье используется
ant design vue2.0
реализация, оant design vue2.0
Пожалуйста, обратитесь к2 small.ant DV.com/docs/v UE/in…
Инициализировать среду
В предыдущей статье мы прошлиvite
Настроил среду разработки, а по факту сейчасvite
Он недостаточно совершенен для поддержки всего проекта, поэтому мы все же решили использовать его в этой статье.vue-cli
Леса для строительства окружающей среды.
Сяобянь использовал
vue-cli
версия4.5.4
, если ваша версия старше, вы можете пройтиnpm update @vue/cli
Для обновления версии скаффолдинга, если он не установлен, можно пройтиnpm install @vue/cli -g
установить
Создайте новый проект, используя строительные леса
-
Откройте терминал в рабочей области (
cmd
), а затем поvue create my-vue3-test
команда для инициализации проекта -
Выберите на первом шаге
Manually select features
, для выполнения функции ручного выбора -
затем пройти
Space
Выберите с помощью клавиши вверх и внизChoose Vue version Babel TypeScript Router Vuex CSS Pre-processors Linter/Formatter
затем введите
- Затем предложите выбрать
Vue
версия, выберите3.x(Preview)
-
Use class-style component syntax?
выберитеn
, то есть вводn
затем введите - А потом подсказывает
Use Babel alongside TypeScript,输入
y` -
Use history mode for router
войтиn
- потом
css
Выбор препроцессораLess
-
eslint
выберитеESLint + Prettier
- После
Lint on save
а такжеIn dedicater config files
- Последний способ вернуться, чтобы завершить строительство проекта
- Затем предложите выбрать
Стартовый проект
После создания нового проекта перейдите к проектуcd my-vue3-test
, затем выполнитеyarn serve
начать проект
После запуска вы можете получить к нему доступ,http://localhost:8080/
посетить проект
настроитьant design vue
в текущемVue3.0
До того, как официальная версия была выпущена, тем более известный интерфейс в КитаеUI
первый в библиотекеVue3.0
унаследовано от домаUI
в библиотеке,PC
Конец в основномant-design-vue
, мобильный терминал в основномvant
Весь пример кода, на котором будет основываться эта статьяant-design-vue
Чтобы продолжить, сначала мы сначала устанавливаемant-design-vue
-
Установить зависимости
yarn add ant-design-vue@2.0.0-beta.6 yarn add babel-plugin-import -D
-
настроить
ant-design-vue
нагрузка по требованиюПерейдите в корневой каталог проекта и откройте
babel.config.js
файл, измените содержимое наmodule.exports = { presets: ["@vue/cli-plugin-babel/preset"], plugins: [ // 按需加载 [ "import", // style 为 true 加载 less文件 { libraryName: "ant-design-vue", libraryDirectory: "es", style: "css" } ] ] };
-
попробуй использовать
vue3 + antdv
Чтобы добавить немного страницы, мы направимviews/Home.vue
Замените код в файле на<template> <a-form layout="inline" :model="state.form"> <a-form-item> <a-input v-model:value="state.form.user" placeholder="Username"> <template v-slot:prefix ><UserOutlined style="color:rgba(0,0,0,.25)" /></template> </a-input> </a-form-item> <a-form-item> <a-input v-model:value="state.form.password" type="password" placeholder="Password" > <template v-slot:prefix ><LockOutlined style="color:rgba(0,0,0,.25)" /></template> </a-input> </a-form-item> <a-form-item> <a-button type="primary" :disabled="state.form.user === '' || state.form.password === ''" @click="handleSubmit" > 登录 </a-button> </a-form-item> </a-form> </template> <script> import { UserOutlined, LockOutlined } from "@ant-design/icons-vue"; import { Form, Input, Button } from "ant-design-vue"; import { reactive } from "vue"; export default { components: { UserOutlined, LockOutlined, [Form.name]: Form, [Form.Item.name]: Form.Item, [Input.name]: Input, [Button.name]: Button }, setup() { const state = reactive({ form: { user: "", password: "" } }); function handleSubmit() { console.log(state.form); } return { state, handleSubmit }; } }; </script>
Затем перезапустите проект, вы можете обнаружить, что его можно использовать в обычном режиме.
ant-design-vue
.
Настройка нового опыта Vue3.0
дляVue3.0
Появление, наиболее привлекающее внимание,Vue3.0
изComposition API
,дляComponsition API
, можно сказать, что поляризация особенно серьезна, некоторым людям особенно нравится этот новый метод проектирования и разработки, в то время как другие считают, что использованиеComposition API
Легко написать код в стиле спагетти (возможно, эти люди не знают ланьчжоуский рамен). в конце концовComposition API
Хорошо это или плохо, я не комментирую, я все равно просто грузчик. И этот раздел знакомитsetup
то естьComposition API
Вход.
Введение в настройку
setup
даVue3.0
предоставляет новое свойство, которое можно найти вsetup
используется вComposition API
, в приведенном выше примере кода мы использовалиsetup
, в приведенном выше коде мыsetup
прошедшийreactive
Инициализирует реактивные данные, затем передаетreturn
Возвращается объект, который содержит объявленные реактивные данные и метод, и эти данные можно использовать напрямую.template
, как в коде выше. оreactive
, я дам вам инструкции в следующем подразделе.
описание параметра настройки
setup
Функция имеет два параметра, которыеprops
а такжеcontext
.
-
props
props
даsetup
Первый параметр функции — это свойство, переданное извне компонента, то же самое, что иvue2.0
изprops
В основном то же самое, например, следующий кодexport default { props: { value: { type: String, default: "" } }, setup(props) { console.log(props.value) } }
Однако следует отметить, что в
setup
середина,props
Нельзя использовать деструктурирование, то есть приведенный выше код нельзя переписать какsetup({value}) { console.log(value) }
несмотря на то что
template
используется вsetup
возвращаемый объект, но дляprops
, нам не нужноsetup
вернулся вtemplate
использовать, как указано вышеvalue
, что может быть непосредственноtemplate
Написано<custom-component :value="value"></custom-component>
-
context
context
даsetup
Второй параметр функции,context
это объект, который содержит три свойства, а именно-
attrs
attrs
а такжеVue2.0
изthis.$attrs
то же самое, то есть внешний входящий не вprops
свойства, определенные в . дляattrs
а такжеprops
то же самое, мы не можемattrs
использоватьes6
деструктурирование, необходимо использоватьattrs.name
написание -
slots
slots
Соответствует слоту компонента, сVue2.0
изthis.$slots
соответствуетprops
а такжеattrs
Такой же,slots
Его также нельзя деконструировать. -
emit
emit
соответствуетVue2.0
изthis.$emit
, событие внешнего облучения.
-
настроить возвращаемое значение
setup
Общая функция Возвращает объект, объект, который содержит компоненты внутри шаблона, который будет использоваться дляdata
с некоторыми функциями или событиями, ноsetup
Вы также можете вернуть функцию, которая соответствуетVue2.0
изrender
функция, которую можно использовать в этой функцииJSX
,дляVue3.0
используется вJSX
, Xiaobian предоставит вам дополнительные инструкции в следующей серии статей.
И последнее, но не менее важное: не
setup
используется вthis
,существуетsetup
серединаthis
и что вам действительно нужноthis
отличаетсяprops
а такжеcontext
В основном удовлетворить наши потребности в развитии.
К пониманиюComposition API
, начиная сreactive
а такжеref
Начинать
В использованииVue2.0
Когда мы обычно объявляем свойства компонента, они будут похожи на следующий код
export default {
data() {
return {
name: '子君',
sex: '男'
}
}
}
Затем вы можете использовать его там, где это необходимо, напримерcomputed
,watch
,methods
,template
И другие места, но есть более очевидная проблема, которую я заявляюdata
разместить и использоватьdata
могут быть далеко друг от друга в структуре кода, существует君住长江头,我住长江尾,日日思君不见君,共饮一江水
ощущение. а такжеComposition API
Очень важной причиной рождения является решение этой проблемы. в Уде на о.Composition API
Мотивация решения проблемы описывается следующим образом:
- По мере роста функциональности код сложных компонентов становится все труднее читать и понимать. Это особенно распространено, когда разработчики читают код, написанный другими. Основная причина в том, что существующий API Vue вынуждает нас организовывать код по параметрам, но иногда имеет смысл организовывать код по логическим связям.
- В настоящее время отсутствует краткий и недорогой механизм для абстрагирования и повторного использования логики между несколькими компонентами.
Теперь давайте разберемсяCompositon API
серединаreactive
а такжеref
представлятьreactive
существуетVue2.6
, новыйapi
,Vue.observer
,сквозь этоapi
может создать реактивный объект иreactive
какVue.ovserver
Функции в принципе одинаковые. Сначала рассмотрим пример
<template>
<!--在模板中通过state.name使用setup中返回的数据-->
<div>{{ state.name }}</div>
</template>
<script>
import { reactive } from "vue";
export default {
setup() {
// 通过reactive声明一个可响应式的对象
const state = reactive({
name: "子君"
});
// 5秒后将子君修改为 前端有的玩
setTimeout(() => {
state.name = "前端有的玩";
}, 1000 * 5);
// 将state添加到一个对象中然后返回
return {
state
};
}
};
</script>
Приведенный выше примерreactive
Основное использование , мы можем увидеть в приведенном выше кодеreactive
а такжеVue.observer
Методы объявления реактивных объектов похожи, но между ними есть некоторые различия. мы используемvue2.0
Одна из самых распространенных проблем заключается в том, что некоторые данные явно изменены, но интерфейс не обновляется, в это время вам нужно использоватьVue.set
решить эту проблему, потому чтоVue2.0
в использованииObject.defineProperty
Не удалось отследить некоторые сценарии, например новые свойства, но прибылиVue3.0
прошедшийProxy
Эта проблема решена, поэтому мы можем прямо вreactive
Добавьте новые свойства в объявленный объект, взгляните на следующий пример
<template>
<div>
<div>姓名:{{ state.name }}</div>
<div>公众号:{{ state.gzh }}</div>
</div>
</template>
<script>
import { reactive } from "vue";
export default {
setup() {
const state = reactive({
name: "子君"
});
// 5秒后新增属性gzh 前端有的玩
setTimeout(() => {
state.gzh = "前端有的玩";
}, 1000 * 5);
return {
state
};
}
};
</script>
Хотя приведенный выше примерstate
не заявляет вgzh
свойства, но в5s
Тогда мы можем напрямую датьstate
Добавить кgzh
свойства, вам не нужно использоватьVue.set
Чтобы решить проблему, что новый атрибут не может ответить.
В приведенном выше кодеreactive
Передавая объект и возвращаяstate
, должны знать об этомstate
Он не используется с входящим объектом,reactive
Исходный объект не изменяется, но возвращается совершенно новый объект, а возвращенный объектProxy
пример. Следует отметить, что максимально использовать в проектеreactive
Возвращается отзывчивый объект вместо исходного объекта.
const obj = {}
const state = reactive(obj)
// 输出false
console.log(obj === state)
представлятьref
Если нам теперь нужно объявить информацию о пользователе в функции, то у нас может быть два разных способа записи
// 写法1
let name = '子君'
let gzh = '前端有的玩'
// 写法2
let userInfo = {
name: '子君',
gzh: '前端有的玩'
}
Вышеупомянутые два разных метода объявления также различаются, когда мы их используем.1
Мы можем использовать переменные напрямую, а для写法2
, нам нужно написатьuserInfo.name
Путь. мы можем узнать, чтоuserInfo
написано сreactive
относительно похожи иVue3.0
Существует также другой способ записи, например写法1
то же самое, т.е.ref
. Сначала рассмотрим пример.
<template>
<div>
<div>姓名:{{ name }}</div>
</div>
</template>
<script>
import { ref } from "vue";
export default {
setup() {
const name = ref("子君");
console.log('姓名',name.value)
// 5秒后修改name为 前端有的玩
setTimeout(() => {
name.value = "前端有的玩";
}, 1000 * 5);
return {
name
};
}
};
</script>
С помощью приведенного выше кода вы можете сравнитьreactive
а такжеref
разница
-
reactive
Входящий объект, возвращаемый объект ответа, иref
Передается базовый тип данных (фактически можно использовать и ссылочный тип), и возвращается ответное значение переданного значения. -
reactive
Получить или изменить свойства можно напрямую черезstate.prop
работать, иref
Возвращаемое значение должно быть переданоname.value
способ изменения или чтения данных. Однако следует отметить, что вtemplate
не нужно проходить.value
чтобы получить значение, это потому, чтоtemplate
уже сделали понимание.
существуетVue3.0
элегантное использованиеv-model
v-model
нетvue3.0
Новые функции, представленные вVue2.0
мы прибыли в большом количествеv-model
,ноV3
а такжеV2
Есть еще большая разница. В этом разделе мы в основном покажем вам, какVue3.0
используется вv-model
,Vue3.0
серединаv-model
Какие сюрпризы предлагаются и какVue3.0
на заказv-model
.
существуетVue2.0
а такжеVue3.0
используется вv-model
существуетVue2.0
Как добиться двусторонней привязки данных? Есть два широко используемых метода, один из которыхv-model
, другой.sync
, Почему их два? Это связано с тем, что компонент может использоваться только для одногоv-model
, но некоторые компоненты должны иметь несколько данных, которые могут отвечать в обоих направлениях, поэтому.sync
. существуетVue3.0
Для достижения единства понимается, что компонент может иметь несколькоv-model
, тоже удалил.sync
. Такие, как следующие коды, соответственноVue2.0
а такжеVue3.0
использоватьv-model
разница.
-
существует
Vue2.0
используется вv-model
<template> <a-input v-model="value" placeholder="Basic usage" /> </template> <script> export default { data() { return { value: '', }; }, }; </script>
-
существует
Vue3.0
используется вv-model
<template> <!--在vue3.0中,v-model后面需要跟一个modelValue,即要双向绑定的属性名--> <a-input v-model:value="value" placeholder="Basic usage" /> </template> <script> export default { // 在Vue3.0中也可以继续使用`Vue2.0`的写法 data() { return { value: '', }; }, }; </script>
существует
vue3.0
середина,v-model
должен сопровождатьсяmodelValue
, то есть имя свойства, которое должно быть двусторонним,Vue3.0
давая разныеv-model
указать разныеmodelValue
для достижения несколькихv-model
. дляv-model
Принцип следующего будет настроенv-model
объяснить.
настроитьv-model
использоватьVue2.0
пользовательскийv-model
Пример
- код компонента
<template>
<div class="custom-input">
<input :value="value" @input="$_handleChange" />
</div>
</template>
<script>
export default {
props: {
value: {
type: String,
default: ''
}
},
methods: {
$_handleChange(e) {
this.$emit('input', e.target.value)
}
}
}
</script>
-
Используйте компоненты в коде
<template> <custom-input v-model="value"></custom-input> </template> <script> export default { data() { return { value: '' } } } </script>
существует
Vue2.0
Мы делаем это, устанавливая компонент с именемvalue
свойство также запускает namedinput
событие для достиженияv-model
, ну и конечно же поmodel
Чтобы изменить имя атрибута и имя события, вы можете увидеть подробное объяснение в моей предыдущей статье.
использоватьVue3.0
пользовательскийv-model
Пример
-
код компонента
<template> <div class="custom-input"> <input :value="value" @input="_handleChangeValue" /> </div> </template> <script> export default { props: { value: { type: String, default: "" } }, name: "CustomInput", setup(props, { emit }) { function _handleChangeValue(e) { // vue3.0 是通过emit事件名为 update:modelValue来更新v-model的 emit("update:value", e.target.value); } return { _handleChangeValue }; } }; </script>
-
Используйте компоненты в коде
<template> <!--在使用v-model需要指定modelValue--> <custom-input v-model:value="state.inputValue"></custom-input> </template> <script> import { reactive } from "vue"; import CustomInput from "../components/custom-input"; export default { name: "Home", components: { CustomInput }, setup() { const state = reactive({ inputValue: "" }); return { state }; } }; </script>
прибыть
Vue3.0
, так как компонент поддерживает несколькоv-model
,такv-model
Изменился метод реализации. Во-первых, нам не нужно использовать фиксированные имена свойств и имена событий.В приведенном выше примере, потому что этоinput
Поле ввода, имя атрибута, которое мы все еще используем,value
, но может быть любым другим, напримерname
,data
,val
и т. д., а имя события, отображаемое после изменения значения, становитсяupdate:value
,Прямо сейчасupdate:属性名
. И в том месте, где вызывается компонент, он же используетсяv-model:属性名
различать разныеv-model
. -
Суммировать
В этой статье мы в основном объясняем построение среды разработки,setup
,reactive
,ref
,v-model
д., и в то же время путем сравненияVue3.0
а такжеVue2.0
разные, пусть всеVue3.0
С определенным пониманием, в дальнейшем мы представим вам больше сведений, таких как технические атрибуты,watch
, жизненный цикл и т. д., так что следите за обновлениями. Эта статья была впервые опубликована в общедоступном аккаунте [некоторые игры во внешнем интерфейсе], узнайтеVue
, вопросы для интервью, все в [в интерфейсе немного поиграть],乘兴裸辞心甚爽,面试工作屡遭难。 幸得每日一题伴,点击关注莫偷懒。
, новая статья будет опубликована в следующий понедельник, скоро увидимся.
Эпилог
Не истощайте свое вдохновение и воображение, не будьте рабом своих моделей. - Винсент Ван Гог