当前位置: 首页 > news >正文

前端面试——父子组件传值

记录集中父子组建传值的方法

一.自定义事件进行父子组件直接传值

直接看往期文章:超详细vue3组合式父子组件传值_vue3父子组件传值-CSDN博客

二.vue3自带API——proviede/inject

我们在子组件迭代层数很深,但是又需要很远的父组件的数值,我们就需要使用proviede/inject来防止出现props透传

我的顶级父组件:AboutView,vue

这里面注入了一个函数和一个方法到provide当中

<template><div>这是测试页面<MsgItem :msg="values"></MsgItem></div>
</template><script lang="ts" setup>
import { provide, ref } from 'vue'
import MsgItem from './MsgItem.vue'const values = ref('666')
const myFun = (nums: number) => {console.log('myFun', nums * 10)
}provide('myFun', myFun)
provide('values', values)
</script><style lang="scss" scoped></style>

我的第二级组件:MsgItem.vue

<template><div>这是MsgItem<MsgItemItem></MsgItemItem></div>
</template><script lang="ts" setup>
import MsgItemItem from './MsgItemItem.vue'
</script><style lang="scss" scoped></style>

我的第三级组件:MsgItemItem.vue

<template><div>是MsgItemItem</div>
</template><script lang="ts" setup>
import { inject, onMounted } from 'vue'const values = inject('values')
const myFun = inject('myFun')
onMounted(() => {console.log(values, myFun(100))
})
</script><style lang="scss" scoped></style>

PS:如果不是父子组件关系,那么就会显示undefined

三.Vuex

 我们首先下载Vuex,作者本人原本的项目使用node V16.14.2下载不下来Vuex4.x.x,索性后面切换Node V18.18.1 然后pnpm下载的Vuex 4.1.0

首先新建一个文件存储全局变量:

// /src/vuex.js
import { createStore } from 'vuex'const store = createStore({state: {count: 0},mutations: {increment(state) {console.log('访问mutations ++')state.count++}},actions: {async increment({ commit }) {console.log('访问commit')for (let i = 0; i < 10; i++) {await commit('increment')}},test({ state }) {console.log('访问test commit')state.count--},test2({ commit }) {console.log('访问test2 commit')commit.count++}},getters: {count(state) {console.log('访问getter')return state.count}}
})
export default store

这里面有四个部分

state:声明全局状态,直接定义初始数据即可

mutations:执行对state里面定义的状态的更改操作,只允许使用state作为参数

actions:执行处理逻辑,支持异步操作。可以使用state,commit,dispatch.getters作为参数

gettters: 可以缓存函数的结果,使得代码简洁。支持state和getters作为参数

在Vue中对Vuex进行的对应操作的代码(store为useStore()实例):
序号操作对应调用
1store.state.xxx state
2store.commit("xxx")mutations
3store.dispatch("xxxx")actions
4store.getters("xxxx")getters

然后挂载到Vue实例,这样就可以使用useStore()

// /src/main.ts
import './assets/main.css'import { createApp } from 'vue'
import { createPinia } from 'pinia'import App from './App.vue'
import router from './router'import store from './vuex' // 引入 storeconst app = createApp(App)app.use(createPinia())
app.use(router)
app.use(store) // 挂载到实例,就可以使用 useStore
app.mount('#app')


http://www.mrgr.cn/news/2723.html

相关文章:

  • jenkins 实现二级联动选择参数
  • 【GitLab】使用 Docker engine安装 GitLab 2: gitlab-ce:17.3.0-ce.0 拉取
  • 【单例模式(饿汉式和懒汉式)】
  • 趋势分享|Gartner解读中国企业容器管理新挑战:混合环境、容器安全、AI支持
  • Tiktok和Facebook广告哪个效果更好?
  • datax关于postsql数据增量迁移的问题
  • 华为od(D卷) 用连续自然数之和来表达整数
  • python 速成指南
  • RV1126交叉编译OPENCV的各种坑
  • 移动端页面出现闪屏
  • (八)Flink Join 连接
  • 五、SPA 单页面、MPA多页面的理解?它们的优缺点分别是什么?
  • Vue50 todolist自定义事件版本
  • 如何用ChatGPT 4.0创作高质量的小红书笔记?
  • 秋招力扣Hot100刷题总结——动态规划
  • HanLP分词的使用与注意事项
  • JsSIP Demo
  • 【自动驾驶】控制算法(三)轮胎侧偏与车辆动力学模型
  • MyBatis系列
  • 【adb】Mac配置adb环境踩坑记录