
import { defineComponent } from "VUE"; Export default defineComponent({ name: "JSx", render() { return <div>我是一个div</div>; }, });
也可以在setup中返回。
import { defineComponent } from "Vue";
export default defineComponent({
name: "jsx",
Setup() {
return () => <div>我是div</div>;
},
});两种方式都可以,具体看个人习惯,setup中访问不到this,但是render中可以通过this访问当前vue实例
用法
class绑定,和react的jsx绑定的有区别,React中使用className,vue中使用class
setup() {
return () => <div class="test">我是div</div>;
},style绑定
setup() {
return () => <div style={{ color: "red" }}>我是div</div>;
},props绑定
// 父组件 setup() { return () => ( <div style={{ color: "red" }}> <span>我是父组件</span> <Mycom msg={"我是父组件传的值"} /> </div> );
// 子组件,setup的第一个参数,可以获取props里的值 setup(PRops) { return () => <div>我是子组件{props.msg}</div>; },
setup() {
function eventClick() {
console.log("点击");
}
return () => <button onClick={eventClick}>按钮</button>;
},组件自定义事件
// 子组件
import { defineComponent } from "vue";
export default defineComponent({
name: "Mycom",
Emits: ["event"],
setup(props, { emit }) {
function senddata() {
emit("event", "子组件传递的数据");
}
return () => (
<div>
<span>自定义事件</span>
<button onClick={sendData}>传递数据</button>
</div>
);
},
});// 父组件 // @ts-nocheck // 这样写在jsx中没问题,但是在tsx中会报ts类型错误,所以我在上面忽略了当前文件ts监测@ts-nocheck import { defineComponent } from "vue"; import Mycom from "./mycom"; export default defineComponent({ name: "Jsx", setup() { function getSon(msg: string) { console.log(msg); } return () => ( <div> <Mycom onEvent={getSon} /> </div> ); }, });
也可以这样解决ts类型报错
setup() {
function getSon(msg: String) {
console.log(msg);
}
return () => (
<div>
<Mycom {...{ onEvent: getSon }} />
</div>
);
},// 父组件
setup() {
const slots = {
test: () => <div>具名插槽</div>,
default: () => <div>默认插槽</div>,
};
return () => (
<div>
<Mycom v-Slots={slots}></Mycom>
</div>
);
},setup(props, { slots }) {
// 子组件
return () => (
<div>
<span>插槽</span>
{slots.default?.()}
{slots.test?.()}
</div>
);
},指令,v-if,v-for等指令在jsx中无法使用,jsx只支持v-model和v-show指令。
setup() {
const inputData = ref("");
return () => (
<div>
<span v-show={true}>显示</span>
<span v-show={false}>隐藏</span>
<input type="text" v-model={inputData.value} />
<span>{inputData.value}</span>
</div>
);
}, 



网友评论文明上网理性发言 已有0人参与
发表评论: