vue3 + jsx +antd 父子组件间的通信

vue3 + jsx +antd

父子之间的通信 (模态框为例)

//父组件 控制一个模态框的显示
const model = defineComponent({
name: ‘model’,
setup() {
let addLinkVisible = ref(false);
const addChange = (bool)=>{
console.log(bool);
addLinkVisible.value = bool;
}
const cancelChange =(bool)=>{
console.log(bool);
addLinkVisible.value = bool;
}
return {
addLinkVisible,
addChange,
cancelChange
}
},
render() {
return (


{/* addChange、cancelChange 是子组件传过来触发的事件
visible、title 是父组件传过去的

*/}
<add-modal
v-model={[this.addLinkVisible, ‘visible’]}
onAddChange={(bool) => this.addChange(bool)}
onCancelChange={(bool) => this.cancelChange(bool)}
title=“标题”
>

)
}
})
// -----------------------------------------------------------------------------------------------------
// 子组件 通过 props 进行对父组件传过来的数据的一个接收
const children = defineComponent({
name: ‘children’,
props: {
title: { type: String },
visible: { type: Boolean }
},
setup(props, { emit }) {
// 方式一 :通过 computed 的 get 、set 属性进行 父子之间的同一数据的双向绑定
const shadow = computed({
get: () => props.visible,
set: (val) => {
emit(‘update:visible’, val);
}
});
const handleOk = () => {
// 子组件模态框点击确定的时候告诉父元素 模态框要进行关闭
emit(‘addChange’, false);
};
const handleCancel = () => {
// 子组件模态框点击取消的时候告诉父元素 模态框要进行关闭
emit(‘cancelChange’, false);
};
// 方式二: 通过watch监听 对数据进行一个双向数据的绑定
// let shadow = ref(false);
// watch(
// () => props.visible,
// () => {
// console.log(‘props.visible’, props.visible);
// shadow.value = props.visible;
// }
// );
return {
shadow,
handleOk,
handleCancel
}
},
render() {
return (
// modal 是antd的一个模态框组件
<a-modal
v-model={[this.shadow, ‘visible’]}
title={this.title}
onOk={this.handleOk}
onCancel={this.handleCancel}
>

)
}
})

上一篇:【javascript】记录babel-plugin-import的坑


下一篇:修改Antd的List列表的单个数据行