gpt4 book ai didi

javascript - Vue.js/JSX : Dynamic event name

转载 作者:搜寻专家 更新时间:2023-10-30 22:24:46 24 4
gpt4 key购买 nike

我正在编写一个 Vue.js 组件。该组件呈现一个 <input>元素。事件监听器正在监听 changeinput事件,根据 Prop 的值(value)。

如何用 JSX 编写渲染函数?

{
props: {
lazy: Boolean,
},
render(h) {
const bindEvent = this.lazy? 'change' : 'input'
return h('input', {
attrs: {
type: 'text',
},
on: {
[bindEvent]: e => this.$emit('update', e.target.value)
},
})
},
}

我想写这样的东西:

render(h) {
const bindEvent = this.lazy? 'change' : 'input'
return <input
type='text'
on={{ [bindEvent]: e => this.$emit('update', e.target.value) }}
/>
}

最佳答案

方案一:为每个事件添加事件监听器

render(h) {
const eventHandler = name =>
(this.bindEvent === name)? e => this.$emit('update', e.target.value)
: () => {}
return <input
type='text'
onChange={eventHandler('change')}
onInput={eventHandler('input')}
/>
}

方案二:给VNode添加事件监听

render(h) {
const eventHandler = name =>
(this.bindEvent === name)? e => this.$emit('update', e.target.value)
: () => {}
const vNode= <input type='text' />
vNode.data.on = { [this.bindEvent]: e => this.$emit('update', e.target.value) }
return vNode
}

关于javascript - Vue.js/JSX : Dynamic event name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com