适当减少手机使用,有助于视力保护... 新的一年祝您:身体健康,阖家欢乐!~~

inject和reject以及defineProps的区别‌,和探索

浏览量:25 作者:admin 类别:: 学习小记 更新时间:2025-04-30 11:27:10

inject和reject以及defineProps的区别‌主要体现在它们在Vue组件通信中的作用和适用场景不同。

inject和provide

‌inject和provide‌是一对用于在组件树中向下传递数据的机制。主要通过这两个API来实现数据的跨组件传递,无需通过每一层组件的props传递。

‌provide‌:在祖先组件中提供数据或方法。提供的数据可以是对象或函数,祖先组件负责管理和更新这些数据。

示例:祖先组件使用provide导出数据,后代组件使用inject接收数据。祖先组件:provide()方法返回一个对象或函数;后代组件:通过inject接收数据,并可以直接使用这些数据‌1。

‌inject‌:在后代组件中使用,用于注入祖先组件提供的数据或方法。

示例:后代组件通过inject接收祖先组件提供的数据,并可以直接使用这些数据‌1。

defineProps

‌defineProps ‌用于子组件接收父组件传递过来的值。

‌父传子‌:父组件通过属性(props)的方式将数据传递给子组件。子组件通过defineProps接收这些数据。数据是单向流动的,子组件不能直接修改父组件传递的数据‌。

 

****但是,测试发现,当defineProps‌  接收的是一个函数时,子组件,可以通过参数的形式,向父组件传参或传值。也是单向的。

父组件

const mytest = ref();

async function getFinancesData(a, b) {

  console.log('main +++', FormParams, a, b);

  mytest.value = a;

<AsyncViewComponent

          :table-data="tableData"

          :total="total"

          :mytest="mytest"

          :get-finances-data="getFinancesData"        

        />

 

子组件:

const props = defineProps<{

  getFinancesData: Function;

  page: number;

  mytest: any[];  

  tableData: any[];

  total: number;

}>();

 

const handleRefresh = async () => {

  try {

    console.log('currentPage', currentPage, PageSize);

    formParams.per_page = PageSize;

    formParams.page = currentPage;

    await props.getFinancesData({

      // page: currentPage,

      // per_page: PageSize,

      page: 6,

      per_page: 20,

    });

  } catch (error) {

    console.error(' 数据加载失败', error);

  }

};

 

{{ mytest }}      这里,他能够显示 传过去的 a 的值

 

子组件刷新数据时,父组件可以接受到参数。

另外,有意思的是,在getFinancesData函数内 改变 某个响应式变量值,仍能通过 defineProps 传给子组件

某种情况下,也可以不使用,‌inject和provide‌,达到“双向通信”的目的。

关于博主
北京南城网络及弱电【张工】为您提供:
校园网、楼宇、村镇、园区,光纤网络覆盖,无线覆盖 华为|H3c|锐捷|爱快|panabit等品牌,路由、交换机、AC、AP 无源光网络(PON)设备,布署、调试、维运,等服务...
应急/临时光纤熔接...[藤仓22S]
博文为学习python所写:内容摘自网络、学习笔记、记事备忘。
QQ:872876353,欢迎交流学习、加Q注明来意。

诗文鉴赏

《满江红》· 岳飞
落星侵晓没,
残月半山低。
怒发冲冠,
凭栏处、潇潇雨歇。
抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,
空悲切。
源于生活-记录日常
The site based on python 3 with flask...