Heim > Fragen und Antworten > Hauptteil
Ich migriere meine Vue-Anwendung von Vue 2 auf Vue 3. Dieser Fehler tritt auf, wenn die Option (function: true) aus einer Funktionskomponente entfernt wird. In meiner Vue 2-Anwendung verwende ich Renderfunktionen, indem ich Requisiten, Daten und Listener als Parameter übergebe. Nun habe ich die offizielle Dokumentation gelesen, verstehe aber nicht, wie man Parameter übergibt? Dies ist meine Vue 2-Renderfunktion.
render(h, {props, data,listeners, children = []}) { let moreIcons = {}; let cType = props.iconType || props.type; if(!cType) { cType = props.picto ? 'picto' : 'line'; } if (cType === 'picto') { moreIcons = moreIconsPicto; } else if (cType === 'line') { moreIcons = moreIconsLine; } let cColor =''; if (props.primary||props.prim) { cColor= 'primary'; } else if (props.point||props.pnt) { cColor= 'point'; } else if (props.default||props.dft) { cColor= 'default'; } else if (!!props.color||!!props.col) { cColor= props.color||props.col; } let cSize = '' ; if(props.large || props.lg) {cSize= 'large';} else if(props.medium || props.md) {cSize= 'medium';} else if(props.small || props.sm) {cSize= 'small';} else if(props.xsmall || props.xs) {cSize= 'xsmall';} else if(props.full) {cSize= 'full';} let customSize = props.iconSize || props.size; if(parseInt(customSize, 10)) {customSize = customSize + 'px';} let iconName = props.icon || children.default().text; let options = { class: [ 'ur-icon', 'ur-icon--'+cType, cColor && 'ur-icon--'+cColor, cSize &&'ur-icon--'+cSize, props.spacing && 'ur-icon--spacing' ], style: { fontSize: customSize }, on: listeners }; if(data.class) { if(Array.isArray(data.class)) { options.class = options.class.concat(data.class); } if(typeof data.class === 'string' || typeof data.class === 'object') { options.class.push(data.class); } } if(data.style) { options.style = Object.assign(data.style, options.style); } let child = []; if (moreIcons[iconName] !== undefined) { options.class.push('more-icon__'+iconName); let svg = moreIcons[iconName]; if(!props.focusable) {svg = svg.replace('<svg ','<svg focusable="false" ');} options.domProps={innerHTML:svg}; } else { // 1. icon class options.class.push('fa-'+iconName); // 2. type class if ( props.brand ) { options.class.push('fab'); } else if( props.fab) { options.class.push('fab'); } else if( props.regular ) { options.class.push('far'); }/* pro only */ else if( props.far ) { options.class.push('far'); }/* pro only */ else if( props.light) { options.class.push('fal'); }/* pro only */ else if( props.fal) { options.class.push('fal'); }/* pro only */ else if( props.old) { options.class.push('fa'); }/* font-awesome 4.0*/ else if( props.fa) { options.class.push('fa'); }/* font-awesome 4.0*/ else { options.class.push("fas"); } } return h('i',Object.assign(data, options)); },
Wie migriere ich es zur Vue 3-Rendering-Funktion oder muss ich die Einstellungsfunktion verwenden? Wenn ich die Setup-Funktion verwende, wie kann ich dann Daten und Listener als Parameter übergeben?
P粉7926739582024-02-27 00:36:26
h
函数应该从 vue
导入,而不是用作参数,我建议使用带有设置挂钩的渲染函数,如下所示:
import { defineComponent, h } from "vue"; export default defineComponent({ props: { ... }, setup(props, { slots }) { let moreIcons = {}; let cType = props.iconType || props.type; ... .... return () => h('i',Object.assign(data, options)); }, });