试图理解 Cycle.js 中的树结构组成

Trying to understand tree structure composition in Cycle.js

我目前正在通过阅读官方 "docs" 和我能找到的任何示例来学习 Cycle.js。我仍在研究一些核心概念,尤其是发现自己一直在努力理解如何形成顶级组件。我认为这是因为我仍在为如何有效地使用流而苦苦挣扎...

在我的场景中,利用 xstream 和 snabbdom,我有一个要以 ul>li 格式呈现的项目列表。我可以看到我的列表如何转换为 li 形式:

const sampleItems$ = xs.fromArray([1, 2, 3, 4, 5]);
const liNodes$ = sampleItems$.map(item => li(item));

我不明白的是如何在不改变现有节点的情况下将 liNodes$ 包装在 ul 中,例如

const ulNode$ = liNodes$.fold((ul, li) => {
    ul.children.push(li);
    return ul;
}, ul([]));

我认为上述示例不是 "nest" 在容器中流式传输内容的正确方法。我意识到这可能由静态标记提供,但想了解如何使用流运算符组合此结构。

写的时候

const sampleItems$ = xs.fromArray([1, 2, 3, 4, 5]);

结果是随着时间的推移发出值 1、2、3、4、5 的流。另一方面,如果你写

const sampleItems$ = xs.of([1, 2, 3, 4, 5]);

结果是发出 一个值 的流,该值是数组 [1, 2, 3, 4, 5]。这可能是你想要的,因为那样你就可以做到

const ulNode$ = sampleItems$.map(sampleItems =>
  ul(sampleItems.map(item =>
    li(item)
  )
);