// file.js
const sharedProps = {
name: {
type: String,
required: true
}
}
// Component.vue
import { sharedProps } from "file.js"
const props = defineProps(sharedProps)
// То же и с emits
// file.ts
export type SomeSharedProps = { name?: string }
// Component.vue
import { SomeSharedProps } from "file.ts"
const props = defineProps<SomeSharedProps>()
// То же и с emits
Что же касается
emits('someEmits', value)
/* Тут крыть нечем, но серьёзно ради такого
создавать отдельную функцию?
*/
Ну, и в напоследок:
1) Composable включает в себя возможность использования себя в другом composable. С emits/props так не получится, ибо "контракты" у компонентов разные за исключением случая, когда они одинаковые by design.
2) Если у компонентов одинаковые контракты из-за design, то имхо лучше дублировать пропсы/эмиты, ибо одинаковый контракт не всегда влечёт за собой одинаковую логику внутри (например, TextInput, DatePicker МОГУТ иметь схожие контракты, но по поведению разные).
UPD: может, я чего-то не понимаю или где-то не прав, но я в тупую не догоняю, зачем использовать mixins и иметь возможные проблемы с debugging, коллизией имён и тд, но зато получить возможность "переиспользования" пропсов и эмитов
Когда специально зарегистрировался на хабре, чтобы написать коммент...
В доке vue довольно подробно расписано о том, почему composbales (https://vuejs.org/guide/reusability/composables.html#comparisons-with-other-techniques). Если Вам очень сильно хочется упороться и получить возможность переиспользования props и emits - поздравляю, "выход" есть:
Что же касается
Ну, и в напоследок:
1) Composable включает в себя возможность использования себя в другом composable. С emits/props так не получится, ибо "контракты" у компонентов разные за исключением случая, когда они одинаковые by design.
2) Если у компонентов одинаковые контракты из-за design, то имхо лучше дублировать пропсы/эмиты, ибо одинаковый контракт не всегда влечёт за собой одинаковую логику внутри (например, TextInput, DatePicker МОГУТ иметь схожие контракты, но по поведению разные).
UPD: может, я чего-то не понимаю или где-то не прав, но я в тупую не догоняю, зачем использовать mixins и иметь возможные проблемы с debugging, коллизией имён и тд, но зато получить возможность "переиспользования" пропсов и эмитов