VUE3传值相关六种方法

这篇具有很好参考价值的文章主要介绍了VUE3传值相关六种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.父传子(props)

 2.子传父组件方法和值(emit)

 3.子传父(v-model)

4.父组件调用子组件方法(ref)

5.VUEX

6.第六种爷孙传值provide / inject(官方并不建议未总结)

1.父传子(props)

VUE3父传子

1.将fatherToChild的值传递到index子组件之中并且在父组件中操作按钮子组件数据会跟随变化

  <div class="bgc fed">
    <div class="father">
      <p>我是父组件</p>
      <p>
        <button @click="changeFather">更改父组件数值</button>
      </p>
    </div>

    <index :fatherToChild="fatherToChild" />
  </div>

2.引入vue的import

import { defineComponent, ref, reactive, toRefs } from "vue";

3.const 所要传递的数据并且写上父组件的按钮方法

    const state = reactive({
      fatherToChild: "fatherToChild",
    });
    const changeFather = () => {
      state.fatherToChild = "changeFather";
    };
    return {
      ...toRefs(state),
      changeFather,
    };

如图所示为一开始传递fatherToChild在点击按钮之后传递数值变为changeFather

4.在子组件之中接收所传递的props

export default {
  props: {
    fatherToChild: String,
  },
  setup(props) {
    return {
      props,
    };
  },
};

如果不确定传值为什么可cons一下传递的props在控制台观察

在子组件中引用为

 <p>父组件给子组件传值:{{ props.fatherToChild }}</p>

效果如图所示

VUE3传值相关六种方法VUE3传值相关六种方法

可以观察到点击父组件后子组件数值跟随变化

 2.子传父组件方法和值(emit)

同VUE2一样子组件没有办法直接更改父组件方法,选用context.emit进行方法传递

1.子组件之中写方法触发context,emit

  setup(props, context) {
    const childChangeFather = () => {
      context.emit("childUseFather", "childUseFather");
    };
    return {
      props,
      childChangeFather,
    };
  },

context.emit(‘方法名’,数值)

 2.父组件之中接收方法后调用更改数值

    const childUseFather = (val) => {
      state.fatherToChild = val;
    };
    <index 
        :fatherToChild="fatherToChild" 
        @childUseFather="childUseFather" />

效果如图所示

点击前VUE3传值相关六种方法点击后VUE3传值相关六种方法

 3.子传父(v-model)

如果子传父所更改的值恰好跟父组件相同可用v-model

1.父组件之中

    <index v-model:fatherToChild="fatherToChild" />

 不再需要使用@和:

2.子组件之中

    const modelChange = () => {
      context.emit("update:fatherToChild", "modelChangeFather");
    };

使用update方法,context.emit("update:方法名","传值")

效果如图所示

点击前VUE3传值相关六种方法点击后VUE3传值相关六种方法

 同时父组件更改数值子组件也会同样跟随变化VUE3传值相关六种方法

4.父组件调用子组件方法(ref)

就是使用 ref 来获取dom 然后操作里面的参数和方法。

父组件之中

    <p><button @click="fatherUse">ref父组件调用子组件方法</button></p>
    <index ref="child" />
    const child = ref();
    const fatherUse = () => {
      child.value.fatherUseChild("fatherChangeChild");
    };

在组件上绑定ref,起名为child在调用时使用child.value.方法名(“传值”)

子组件之中

    const state = reactive({
      children: "children",
    });
    // 父组件调用子组件方法并且进行传值更改
    const fatherUseChild = (val) => {
      console.log("调用成功");
      state.children = val;
    };

接收到传值val,触发方法给children重新赋值

效果如图所示

VUE3传值相关六种方法点击最后一个按钮父组件调用时VUE3传值相关六种方法

可以观察到子组件之中子组件的值变化为fatherChangeChild 

5.VUEX

文件目录结构如图所示

VUE3传值相关六种方法

 index.js之中

import { createStore } from 'vuex'
import {state} from './state'
import {mutations} from './mutations'
import {actions} from './actions'
export default createStore({
  state,
  mutations,
  actions,
  modules: {
  }
})

注意如果引入的时候没写{}在后续会导致store.state.字段找不到,需要store.state.state.字段才能查到数据,只有好不好用就不知道了= =

首先在state之中声明一个count

const state = {
  count: 0,
}
export { state }

然后在页面之中进行引用时

<template>
  <div class="bgc fed">
    <div class="father">
      <p>我是父组件</p>
      <p>vuex中的数据:{{ store.state.count }}</p>
      <child />
    </div>
  </div>
</template>
<script>
import child from "@/views/loginComponents/child.vue";
import { defineComponent } from "vue";
import { useStore } from "vuex";
export default defineComponent({
  components: {
    child,
  },
  name: "index",
  setup() {
    const store = useStore();
    return {
      store,
    };
  },
});
</script>
<style scoped>
.father {
  height: 600px;
  width: 200px;
  background: rgb(255, 199, 146);
  margin: 0 auto;
}
</style>

可以通过console一下store来观察数据是什么

如果想要对数据进行更改需要在mutations文件中进行操作

const mutations = {
  addCount(state, payload) {
    state.count += payload
  },
  changeCount(state, payload) {
    state.count = payload
  }
}
export { mutations }

如图为递增和值替换两种方法

    const changeState = () => {
      store.commit("addCount", 1);
    };

使用的时候直接store.commit即可

效果如图所示

VUE3传值相关六种方法

每次点击递增1

如果想要进行异步操作的话 在actions文件中调用mutations方法来实现

const actions = {
  asyncAddStoreCount(store, payload) { // 第一个参数是vuex固定的参数,不需要手动去传递
    store.commit("addCount", payload)
  },
}
export { actions }

使用的时候

    const asyncChangeStoreCount = () => {
      setTimeout(() => {
        // asyncAddStoreCount是mutations中的方法,2是传递过去的数据
        // 异步改变vuex用dispatch方法,这里用setTimeout模拟异步操作
        store.dispatch("asyncAddStoreCount", 2);
      }, 1000);
    };

用一个计时器模拟一下

效果图如图所示

VUE3传值相关六种方法点击父VUE3传值相关六种方法可以发现三个组件之中数据都跟着发生了变化,点击子孙组件同样。

在父组件之中点击异步后点击更改,可以发现数据先加了1两秒之后又加了2文章来源地址https://www.toymoban.com/news/detail-435295.html

到了这里,关于VUE3传值相关六种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)

    父组件:父组件引入子组件时,通过 child :parentValue = \\\"parentValue\\\"/child 子组件传值。 备注:这种方式父传值很方便,但是传递给后代组件不推荐(父-子-孙),且这种方式父组件不能直接修改父组件传过来的数据。 子组件:子组件通过props即 props:{ parentValue:{ type:String, default:\\\"\\\" } } 来

    2024年02月05日
    浏览(40)
  • vue3组件传值方法

    提示:vue组件传值学习用vue3语法 提示:以下是本篇文章正文内容,下面案例可供参考 1.在父组件中引入子组件并通过 components 注册 父组件内容示例: html 内容 js 内容 import child from \\\"../components/Child/Child\\\"; 子组件内容示例 html 内容 js 内容 props: { msg: { type: String, default: \\\"\\\", }, },

    2024年02月07日
    浏览(36)
  • Vue3中子组件向父组件传值的方法

    父组件可以通过props向子组件传值, 子组件可以用过 emits(‘update:prop’, propValue) 修改父组件绑定在此Prop上父组件的值 本文演示了一个可以缓存分页大小(每页显示几行数据)的分页组件的使用, 它是对el-pagination做了一个简单的封装 如下是一个分页组件 核心: 在换页时通过 emit

    2024年02月16日
    浏览(40)
  • vue2和vue3 子组件父组件之间的传值方法

    在组件化开发的过程中难免会遇见 子组件和父组件之间的通讯那么这里讲关于vue2和vue3不同的通讯方式 先看一下vue2 父组件向子组件传递参数 父组件通过 : 语法 其实就是v-bind 来传递参数 子组件通过 props 来获取父组件传递的方法 亿点小知识:子组件接收到数据之后,不能直接

    2024年02月09日
    浏览(47)
  • Vue:父子组件传值( props、sync、v-model )

    子组件通过$emit方法,通过自定义事件的方式将自身的值传递给父组件 在有些情况下,我们可能需要对一个 prop 进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以变更父组件,且在父组件和子组件两侧都没有明显的变更来源。 所以推荐以

    2023年04月08日
    浏览(45)
  • Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

    目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 在上篇文章我们介绍了父子组件之间的传值通信,本文将介绍不仅限

    2024年02月05日
    浏览(47)
  • Python获取当前目录下所有文件的六种方法

    这段代码中, os.listdir() 方法返回的是一个列表,因为获取的是文件名,而不是文件路径。如果需要获取文件路径,可以使用 os.path.join() 方法将列表中的文件名拼接成一个完整的路径。 这段代码中, os.getcwd() 返回当前工作目录, glob.glob() 函数用于获取指定目录下所有文件,

    2024年02月12日
    浏览(47)
  • Vue3 - props

    props 用于接收父组件传递的值 在使用 script setup 的单文件组件中,props 可以使用 defineProps() 宏来声明: 在没有使用 script setup 的组件中,prop 可以使用 props 选项来声明(和vue2一致): 传递给 defineProps() 的参数和提供给 props 选项的值是相同的,两种声明方式背后其实使用的都

    2024年02月05日
    浏览(69)
  • vue3中的Props

    一个组件需要显示声明它所接受的props,这样vue才能知道外部传入的哪些是props,哪些是透传attribute 在使 script setup 的单文件中,props可以使用 ==defineProps()==宏来声明: 在没有使用 script setup 的组件中,prop可以使用props选项来声明: 注意传递给 defineProps 的参数和提供给props选项

    2024年02月08日
    浏览(37)
  • 【vue3】vue3接收props以及emit的用法

    技术 :vue3.2.40 UI框架 :arco-design 2.44.7 css技术 :less 4.1.3 实现 :子组件接收props以及通过emit方法传值父组件 vue3使用的组合式API,我这里使用的是defineComponent 1.setup里如果需要接收props和使用emit,只需要带参数 setup(props, { emit }) 2.setup里面只需要带emit(‘handleCancel’),不需要带

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包