将函数传递给 child

Passing a function to a child

代码非常简单:我尝试将函数 addContactFn()MainComp 传递到 SideMenu。单击时出现错误

Uncaught TypeError: this.value.handleEvent is not a function

class MainComp extends LitElement {
    constructor(){
        super()
        this.addContactFn = this.addContactFn.bind(this)
    }
    addContactFn() {
        console.log("clicked");
    }
    render(){
        return html`
<div class="main-page">
   <side-menu addContactFn="${this.addContactFn}"></side-menu>
</div>
`
    }

}


class SideMenu extends LitElement {
    constructor(){
        super()
    }
    static get properties(){
        return {
            addContactFn: Function
        }
    }
    render(){
        return html`<a @click="${this.addContactFn}">Add contact</a>`
    }

}

正如 Thad 所说,属性始终是字符串,并没有真正安全有效的方法来解析执行中的函数

但是,您实际上什至不需要使用它,只需将函数作为 属性 而不是作为属性传递,这就足够了,下面是 MainComp 的渲染在此之后的结果

render(){
  return html`
    <div class="main-page">
     <side-menu .addContactFn="${this.addContactFn}"></side-menu>
    </div>
    `;
}

基本上,您只需在 属性 名称前添加一个点

更多信息请查看LitElement's guide

话又说回来,这种做事的方式非常 React 风格,不推荐用于 Web 组件,您可能应该只在子组件中创建一个自定义事件并在父组件中获取它