发布时间:2023-07-06 15:30
在TSX文件中定义组件有几种常用方式:
setup
函数,但是不同之处它可以直接返回JSXexport default (props, ctx) => <div>tree</div>
defineComponent
:传递render
选项,也就是Options API,这种缺点是要访问this
export default defineComponent({
render() {
return <div>tree</div>
}
})
setup
选项,利用Composition API,避免this
,是推荐的形式export default defineComponent({
setup(props, ctx) {
return () => <div>tree</div>
}
})
Vue3中使用tsx,借助了babel-plugin-jsx,大部分语法和react-jsx相同,除了几个Vue独有的概念:修饰符、slot
、directive
、emit
,因此这里仅关注这些特殊部分:
import { withModifiers, defineComponent } from "vue";
const App = defineComponent({
setup() {
const count = ref(0);
const inc = () => {
count.value++;
};
return () => (
<div onClick={withModifiers(inc, ["self"])}>{count.value}</div>
);
},
});
指令使用需要我们转换思维,有几种不同情况:
{}
,不是""
<input type="text" v-model={this.counter} />
<div>{ condition ? <span>A</span> : <span>B</span> }</div>
import { defineComponent, ref } from "vue";
const App = defineComponent({
setup(){
const list = ref<string[]>([])
return () => {
list.value.map((data,index) => <p key={index}>{data}</p>)
}
}
});
defineComponent({
directives: {
focus: {
mounted(el) {
el.focus()
}
}
},
setup() {
return () => <input v-focus>
}
})
JSX中想要实现Vue中的插槽写法也有很大不同,主要利用一个叫做v-slots
的指令来实现:
Parent.tsx
export default defineComponent({
setup() {
return () => (
<Child
v-slots={{
prefix: () => <i>prefix</i>, // 具名插槽
suffix: (props: Record<"name", string>) => <span>{props.name}</span>, // props可作插槽作用域的作用
}}
>
默认插槽内容
</Child>
);
},
});
const Child = defineComponent({
setup(props, { slots }) {
return () => (
<>
默认插槽: {slots.default && slots.default()}
<br />
具名插槽: {slots.prefix && slots.prefix()}
<br />
作用域插槽:{slots.suffix && slots.suffix({ name: "suffix" })}
</>
);
},
});
vue中子向父传值一般都是emit的方式,这个在vue3中大致写法相似,只是多了一个定义emit的步骤,这也是为了后续的类型推倒做准备。
defineComponent({
emits: ["click"],
setup(props ,{ emit }) {
return () => (
<button onClick={() => {emit("click")}}>点我触发emit</button>
);
},
});
linux snort centos搭建入侵检测系统snort及问题总结与解答
命令行 cnpm install 报错: Install fail Error: Unsupported URL Type: npm:vue-loader@^15.9.7
论文《一种改进的基于邻域信息的人口普查变换立体匹配算法》学习
【Proteus+51单片机学习笔记】-51/52系列单片机简介
Vue+Openlayers加载Geoserver发布的TileWMS后更换shp数据源的流程
python中多维数组的计算_Numpy多维数组基础及运算详解
MAD,现代安卓开发技术:Android 领域开发方式的重大变革~