我给自己定的顺序
- 父子之间:先看
props/emit - 跨多层传递且改动不频繁:再看
provide/inject - 多处共享且逻辑复杂:最后才考虑集中式状态管理
父子通信
父传子用 props,子通知父用 emit。数据流向保持单向,排错会轻松很多。
// 父组件
<Child :title="pageTitle" @saved="onSaved" />
// 子组件
const props = defineProps({ title: String })
const emit = defineEmits(['saved'])
emit('saved', payload)
跨层注入
主题配置、当前用户只读信息这类「上层提供、下层消费」的数据, 用 provide/inject 能少传几层 props。我尽量避免用它传递频繁变化且责任不清的状态。
经验:组件通信乱,往往不是 API 不够,而是职责边界没划清。
先问「这份数据该由谁拥有」,再选通信方式。