我开始了一个基于LitElement的项目,里面 有很多相互嵌套的组件,假设我们有这样的结构:
根组件是my-app
import { LitElement, html, customElement, query } from 'lit-element';
import './my-form';
import './my-view';
import { MyView } from './my-view';
@customElement('my-app')
export class MyApp extends LitElement {
@query('my-view') private myView?: MyView;
private handleCountChange(e: CustomEvent<{ count: number }>) {
if (!this.myView) throw 'my-view not found!';
this.myView.count = e.detail.count;
}
render() {
return html`
<my-form @countChanged=${this.handleCountChange}></my-form>
<my-view></my-view>
`;
}
}
如您所见,我们有两个组件: my-form
import { LitElement, html, customElement, property } from 'lit-element';
@customElement('my-form')
export class MyForm extends LitElement {
@property({ type: Number }) count: any = 0;
private updateCount(e: KeyboardEvent) {
this.count = (<HTMLInputElement>e.target).value;
this.dispatchEvent(
new CustomEvent('countChanged', {
composed: true,
bubbles: true,
cancelable: true,
detail: { count: this.count }
})
);
}
render() {
return html`
<input value=${this.count} @input=${this.updateCount} type="text" />
`;
}
}
和我的看法:
import { LitElement, html, customElement, property } from 'lit-element';
@customElement('my-view')
export class MyView extends LitElement {
@property({ type: Number }) count: number = 0;
render() {
return html`
<p>${this.count}</p>
`;
}
}
为了获得属性count
更改,我分派my-form
了my-view
事件侦听器,my-app
然后在那时使用它,除了将其作为组件导入之外,handleCountChange
我还分配了作为类导入的count
值。MyView
目前,这是可行的,但我觉得还有很长的路要走,尤其是当我有更多嵌套组件时。我想知道这样做是否有更好的方法。是否有类似的东西Context API
存在于react.js
我考虑使用redux
但有人不推荐使用 litElemnt。我正在考虑的一个想法是将事件发送到document
而不是当前组件,但也许这是一个不好的做法!你有什么建议,请告诉我?