Written from your two Components In-Depth notes: props, events and v-model and slots, provide/inject, fallthrough attributes and async components. The matching study pages are Components: props, events and v-model and Components: attrs, slots and provide.
.number falling back to the string, defineModel without a parent binding, and the computed-based pattern it replaced.inheritAttrs: false and what $attrs contains, slot shorthands, a data table with dynamic scoped slots, conditional slots.defineAsyncComponent expects.You fixed the provide object syntax and the required-props rule since the last check. These are still in the notes.
"Global registration in app.vue" should be app.component('Name', Component) on the application instance in main.ts; App.vue is a component and cannot register globally.
v-model.capitalize:name should be v-model:name.capitalize, and name.toUpperCase() changes nothing because the result is discarded; the transformation belongs in the set option of defineModel.
The example declares updatedName but emits updateName, and listens with @updated-number for updateNumber. Listeners must match the declared name; only camelCase to kebab-case is converted.
Events tell the parent that something happened. Scoped slots hand the child's data to the parent's markup, so the parent decides how each item looks.
The new provide/inject note says a composable would make all three lists share one value. That is only true when the composable keeps its state at module level. A composable that creates state inside the function gives each caller a copy, but that copy cannot reach the caller's children without props or provide, which is why provide/inject is the right tool for per-subtree state.
DataTable with cell-<key> scoped slots and override two columns from the parent.defineModel and once with a prop, an emit and a writable computed, and check that both behave the same."It is a prop plus an event: modelValue and update:modelValue by default, or a named pair such as title and update:title with v-model:title, so a component can have several. defineModel() declares both and returns a ref; writing it emits the update, and if no parent binds it, it behaves as local state. Before 3.4 you wrote the prop, the emit and a writable computed yourself. Modifiers arrive as a modifiers object, and transformations go in the set or get option."
"Attributes and listeners the parent passes but the component does not declare as props or emits fall through to its single root element, with class and style merged. If that root is another component, they are passed on. With several roots nothing is applied until one binds $attrs. inheritAttrs: false turns this off so I can put v-bind="$attrs" on an inner element; in Vue 3 $attrs includes class, style and listeners."
"When the state belongs to one subtree rather than the whole app: a form and its fields, a tabs container and its panels, or several instances of the same list that each need their own shared state. Each provider creates its own state and descendants get the nearest one. A store is a singleton, so every instance would share it. I keep mutations in the provider and provide readonly() state plus functions."
Nothing yet. Notes filed here show up on this page and the section overview.
Vue essentials
Questions and flashcards from your notes on the Vue docs' Essentials chapter — the app instance and error handler, template expressions, directives and their parts, class and style bindings, conditional and list rendering, keys, event modifiers, forms, template refs and dynamic components — with a fact check of the notes.
Reusability
Questions and flashcards from your notes on the Vue docs' Reusability chapter — composables with shared and per-caller state, conventions, toValue and MaybeRefOrGetter inputs, lifecycle hooks in composables, custom directives and their bindings, global directives, plugins and a small i18n plugin — with a fact check of the notes.