我想要一个父组件来管理应用程序的中心状态并将相关信息传递给它的子组件,并根据需要重新渲染它们。这就是我在 Stencil 中理解父/子通信的方式——父母通过属性向孩子发送数据,孩子通过事件向父母发送数据。这个假设是错误的吗?
我在网上找不到不引用 React 特定 API 的相关示例时遇到问题
编辑:在我的情况下,父级渲染一个带有插槽的包装器组件可能是相关的。代码示例已更新以反映...
简化示例:
父.tsx:
// Parent Component
import { Component, State, Listen, h } from '@stencil/core';
@Component({
tag: 'parent',
styleUrl: 'parent.css',
})
export class Parent {
@State() selectedFeature: any = null;
@Listen('featureClicked', { target: 'body' })
updateSelectedFeature(e: CustomEvent) {
this.selectedFeature = e.detail;
}
render() {
return [
<wrapper>
<child slot="content" selected-feature={this.selectedFeature}></child>
</wrapper>,
// ...other components
];
}
}
child.tsx:
// Child Component
import { Component, Prop, h } from '@stencil/core';
@Component({
tag: 'child',
styleUrl: 'child.css',
})
export class Child {
@Prop() selectedFeature!: any;
render() {
if (!this.selectedFeature) return null;
return (
<ul>
{
Object.entries(this.selectedFeature.attributes)
.map((key, val) => <li>{key}: {val}</li>)
}
</ul>
);
}
}
单击新功能时,我希望子组件显示它。目前,我无法做到这一点,除非:
- 我在第一次渲染时传递了一个有效的功能(它正确渲染一次)
- 在子级中有一个侦听器以从 DOM 中捕获所选功能
有没有办法在孩子不听事件的情况下做到这一点?
提前致谢。