去掉jsx的话就报错了
组件具体写法
改完用到页面又报错了
完整报错信息
组件修改后的代码
<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
写法的。