vue3尝鲜 关于sutup函数

vue3相较与vue2 在写法上有较大的出入,刚开始使用是会有诸多不适,

setup函数是组合API的核心入口函数

1.setup函数注意点
export default {
	setup() {    }
}
  • setup函数的执行时机是在beforeCreate和created之间
  • 由于setup执行时机是在created之间,所以组件才刚刚被创建,而data和methods还没初始化好,所以无法在setup中使用data和methods
  • setup中this指向undefined
  • setup只能是同步的,不能是异步的
2. setup(porps,context) 组件间传值

porps可以接受 组件参数
context 内是组件的内置api
当你需要向父组件暴露事件时 需要 使用到 $emit 需要在context中结构出来emit

//子组件
export default {
  setup(props, context) {
  	const { emit } = context; //结构出 emit 向外暴露接口
	//  向外暴露事件 submitha
    function submitHander() {
      emit("submitha", formData);
    }
  }
 }
 
 
 //父组件
 <component :is="isName" @submitha="subMitHander"></component>
 
 ....
 此处subMitHander写在methods内的
 subMitHander(form) {
	 console.log(
		 // form,
		 `>>>>>登录信息 name:${form.value.name},pwd:${form.value.pwd}`
	 );
 },
 
 //setup函数中
 export default {
  setup(props, context) {
  	 function subMitHander(form) {
		 console.log(
			 // form,
			 `>>>>>登录信息 name:${form.value.name},pwd:${form.value.pwd}`
		 );
	 },
	 return {
	 	subMitHander,
	 }
  }
}
3. setup 必须要有返回值 ,否则外部无法访问 内部变量、函数

template内使用变量时 直接使用,这个跟vue2没有多大变化
但是在 setup内使用修改变量时 需要 .value

 setup() {
    let isName = ref("login01");
	 function isChange(value) {
      isName.value = value;
    }
}
4. setup是组合api的入口,实现路由跳转

内部写法有点类似 原生js 彼此的访问无需this
使用外部api需要在相应的外部js 解构出来
也可自定义工具hook函数进行引入调用

//vue3
import { useRouter,onMounted } from "vue-router";
export default {
  setup() {
   	const router = useRouter();
	onMounted(() => {
      router.push({
        path: "/home",
      });
    });
  }
}

//vue2
export default {
   mounted() {
    	this.$router.push({
			path: "/home",
		});
  },
}

两种写法 实现的效果类似的

posted @ 2022-04-07 16:39  xiao旭  阅读(87)  评论(0编辑  收藏  举报