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.
-
propspropsда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> -
contextcontextдаsetupВторой параметр функции,contextэто объект, который содержит три свойства, а именно-
attrsattrsа такжеVue2.0изthis.$attrsто же самое, то есть внешний входящий не вpropsсвойства, определенные в . дляattrsа такжеpropsто же самое, мы не можемattrsиспользоватьes6деструктурирование, необходимо использоватьattrs.nameнаписание -
slotsslotsСоответствует слоту компонента, сVue2.0изthis.$slotsсоответствуетpropsа такжеattrsТакой же,slotsЕго также нельзя деконструировать. -
emitemitсоответствует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, вопросы для интервью, все в [в интерфейсе немного поиграть],乘兴裸辞心甚爽,面试工作屡遭难。 幸得每日一题伴,点击关注莫偷懒。, новая статья будет опубликована в следующий понедельник, скоро увидимся.
Эпилог
Не истощайте свое вдохновение и воображение, не будьте рабом своих моделей. - Винсент Ван Гог