Rumah > Soal Jawab > teks badan
Saya sedang memindahkan aplikasi vue saya dari vue 2 ke vue 3. Ralat ini berlaku apabila mengalih keluar pilihan (fungsi: benar) daripada komponen berfungsi. Dalam aplikasi vue 2 saya, saya menggunakan fungsi render dengan menghantar prop, data dan pendengar sebagai parameter. Sekarang, saya telah membaca dokumentasi rasmi tetapi tidak dapat memahami cara untuk lulus parameter? Ini ialah fungsi render vue 2 saya.
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)); },
Bagaimana untuk memindahkannya ke fungsi rendering vue 3 atau perlu menggunakan fungsi tetapan? Jika saya menggunakan fungsi persediaan maka bagaimana saya boleh menghantar data dan pendengar sebagai parameter?
P粉7926739582024-02-27 00:36:26
h
函数应该从 vue
Import, daripada menggunakannya sebagai parameter, saya mengesyorkan menggunakan fungsi render dengan cangkuk tetapan seperti ini:
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)); }, });