cari

Rumah  >  Soal Jawab  >  teks badan

TypeError dalam fungsi render Vue 3: Tidak dapat membaca sifat yang tidak ditentukan (baca 'iconType')

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粉585541766P粉585541766305 hari yang lalu412

membalas semua(1)saya akan balas

  • P粉792673958

    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));
      },
    });
    
    
    

    balas
    0
  • Batalbalas