生成器
生成器是使用 signal 实现的,由于 signal 的延迟计算,它们是不可预测的。您可能需要考虑使用 effects 代替。
在未来的版本中,生成器将使用 effects 重新实现。
有时我们希望给定节点的子节点是反应式的。换句话说,我们希望它们根据某些外部状态进行更改。考虑以下示例:
const count = createSignal(10);
view.add(
<Layout layout>
{range(count()).map(() => (
<Circle size={32} fill={'white'} />
))}
</Layout>,
);
我们首先创建 count signal,然后使用其值生成 N 个圆。
此示例不是反应式的 - 更改 count signal 不会更改 Layout 节点内的圆数。我们可以通过使用返回子节点的函数而不是直接编写它们来修复这个问题:
const count = createSignal(10);
view.add(
<Layout layout>
{() => range(count()).map(() => <Circle size={32} fill={'white'} />)}
</Layout>,
);