All streams
Search
Write a publication
Pull to refresh
1
0
Send message

Когда специально зарегистрировался на хабре, чтобы написать коммент...

В доке vue довольно подробно расписано о том, почему composbales (https://vuejs.org/guide/reusability/composables.html#comparisons-with-other-techniques). Если Вам очень сильно хочется упороться и получить возможность переиспользования props и emits - поздравляю, "выход" есть:

// 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, коллизией имён и тд, но зато получить возможность "переиспользования" пропсов и эмитов

Information

Rating
Does not participate
Registered
Activity