vue2.7以上怎么使用jsx语法?使用的是webpack打包?

vue2.7以上怎么使用jsx语法?使用的是webpack打包?
去掉jsx的话就报错了
vue2.7以上怎么使用jsx语法?使用的是webpack打包?
组件具体写法
vue2.7以上怎么使用jsx语法?使用的是webpack打包?
改完用到页面又报错了
vue2.7以上怎么使用jsx语法?使用的是webpack打包?
完整报错信息
vue2.7以上怎么使用jsx语法?使用的是webpack打包?
组件修改后的代码
<script>
import { defineComponent } from 'vue'
export default defineComponent({
props: {

showNum: {

type: Number,

}

},
setup (props, { slots }) {

// FIXME: slots无法响应式,必须得函数返回并在模版调用才有作用

function getRows () {

return slots.default().filter(x => x.children?.default)

}

const _slots = getRows()

let showNum

if(props.showNum === undefined || props.showNum === null || props.showNum === false) {

showNum = _slots.length

}else{

// eslint-disable-next-line vue/no-setup-props-destructure

showNum = props.showNum

}

const divider = (<el-divider direction="vertical" />)

return () => (

<div>

{getRows().slice(0, showNum).map((x,i) => (

<div>

{i !== 0 ? divider : null}

<el-link underline={false}>{x}</el-link>

</div>

))}

{

getRows().slice(showNum).length ? (

<div>

{divider}

{(

<el-dropdown class="app-more" popper-class="app-more-dropdown">{{

default: () => (

<svg-icon icon-class="more" class-name="link-more" />

),

dropdown: () => (

<el-dropdown-menu>{{

default:() => getRows().slice(showNum).map(x => {

const itemSlot = x.children.default()[0]

// console.log(itemSlot)

return (

<el-dropdown-item {...x.props} >{itemSlot.children}</el-dropdown-item>

)

})

}}</el-dropdown-menu>

)

}}</el-dropdown>

) }

</div>

) : null

}

</div>

)

}
})

</script>


回答:

去掉 lang="jsx" 之后试试看?我记得 Vue2 原本就是支持 jsx 写法的。

- <script lang="jxs">

+ <script>

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

TypeError:Cannot read properties of null (reading $createElement')

这个问题我遇到了,我这边是因为自动注入了const h = this.$createElement, 官网有说明vue2.7以上怎么使用jsx语法?使用的是webpack打包?

需要配置babel.config.js,开启compositionAPI, 配置如下:

module.exports = {

presets: [

[

// https://github.com/vuejs/vue-cli/tree/dev/packages/@vue/babel-preset-app#readme

'@vue/cli-plugin-babel/preset',

{

// https://github.com/vuejs/jsx-vue2/tree/dev/packages/babel-preset-jsx

jsx: {

// vModel: false,

compositionAPI: true,

},

},

],

],

}

以上是 vue2.7以上怎么使用jsx语法?使用的是webpack打包? 的全部内容, 来源链接: utcz.com/p/933811.html

回到顶部