你好,我正在将Vue 2迁移到Vue 3,我有一个render函数的问题,因为Vue 3中的render接收任何参数。我读到我可以使用setup方法,但它不接收包含data和children的上下文参数。
下面是我想要迁移的旧代码:
render(h, { children, props, data }) {
if (props.item) {
const { first, last } = props;
const reorderingClasses = Object.entries({ first, last })
.filter(filterFalsy)
.map(([key, value]) => `${key}-${value}`)
.join(' ');
const { xs, sm, md, lg } = props;
const sizeClasses = Object.entries({ xs, sm, md, lg })
.filter(filterFalsy)
.map(
([key, value]) => `col-${key}${value !== 'auto' ? `-${value}` : ''}`
)
.join(' ');
return (
<div {...mergeData(data, { class: [reorderingClasses, sizeClasses] })}>
<div class="box">{children}</div>
</div>
);
return children
}怎么说在设置方法中,我没有包含data和children的上下文。
文档:https://v3.vuejs.org/guide/migration/functional-components.html
非常感谢。
发布于 2021-07-28 16:43:24
正如您所说的,您可以使用setup钩子来呈现模板(JSX),您可以使用slots.default而不是children,使用reactive或ref来代替data:
setup(props, { slots }) {
if (props.item) {
const { first, last } = props;
const reorderingClasses = Object.entries({ first, last })
.filter(filterFalsy)
.map(([key, value]) => `${key}-${value}`)
.join(' ');
const { xs, sm, md, lg } = props;
const sizeClasses = Object.entries({ xs, sm, md, lg })
.filter(filterFalsy)
.map(
([key, value]) => `col-${key}${value !== 'auto' ? `-${value}` : ''}`
)
.join(' ');
return ()=>(
<div {...mergeData(data, { class: [reorderingClasses, sizeClasses] })}>
<div class="box">{children}</div>
</div>
);
}
return ()=>slots.default()
}https://stackoverflow.com/questions/68556525
复制相似问题