Какой предпочтительный способ регистрации функций в Vue Component.Я склонен регистрировать в компоненте только методы, которые требуются для представления (или требуют прямого доступа к данным компонента), и другие функции, которые не требуются для представления вне компонента vue.Предполагается, что utilityFunction()
и utilityFunctionTwo()
в настоящее время используются только внутри этого компонента.
Это пример:
<template>
<button @click="bar"></button>
<button @click="foo"></button>
<button @click="baz"></button>
</template>
<script>
export default {
name: "SampleComponent",
data() {
return {
someVariable: "ABC",
otherVariable: 123
}
},
methods: {
foo() {
//some logic
utilityFunction(this.someVariable);
//other logic
},
bar() {
//some logic
utilityFunction(this.someVariable);
utilityFunctionTwo(this.otherVariable);
//some other logic
},
baz() {
//some logic
utilityFunctionTwo(this.someVariable);
//some other logic
}
}
}
function utilityFunction(arg){
//do something
}
function utilityFunctionTwo(arg){
//do something
}
</script>
Аргументы могут быть разными, служебные функции могут быть чистыми ивернуть что-то или изменить аргумент.Там может быть много разных сценариев.Но я надеюсь, что вы поняли суть.
Другой подход заключается в добавлении этих функций в качестве методов к вашему компоненту.Например:
<template>
<button @click="bar"></button>
<button @click="foo"></button>
<button @click="baz"></button>
</template>
<script>
export default {
name: "SampleComponent",
data() {
return {
someVariable: "ABC",
otherVariable: 123
}
},
methods: {
foo() {
//some logic
this.utilityFunction();
//other logic
},
bar() {
//some logic
this.utilityFunction();
this.utilityFunctionTwo(this.otherVariable);
//some other logic
},
baz() {
//some logic
this.utilityFunctionTwo(this.someVariable);
//some other logic
},
utilityFunction() {
//do something
console.log(this.someVariable)
//other stuff
},
utilityFunctionTwo(arg) {
//do something
}
}
}
</script>
При таком подходе иногда не требуется передавать аргумент методу, так как он имеет доступ к компонентам data
объект.
Я немного предпочитаю первый подход из-запричины:
- У меня есть короткий список методов, используемых шаблоном или требуемых компонентом (по некоторым причинам).Иногда этот список может быть довольно длинным, если все методы помещены туда.
- Если функция будет использоваться в других местах в будущем, я смогу легко добавить ее в некоторый файл
.js
и импортировать ее в другие компоненты. - Функции не имеют доступа к области действия компонентов, еслиим не нужно
- Это спасает меня от ввода ключевого слова
this
;-) И иногда может быть полезно, если используется внутри лямбды.
Я не уверен, если этовопрос мнений, и вы можете предпочесть один подход другому, исходя только из ваших личных предпочтений, или это объективные причины, по которым вам следует предпочесть один другому, например (но не ограничиваясь этим) производительность компонента или принципы разработки программного обеспечения, которыенарушено одним решением.