我正在使用 cycleJS 制作一个表情符号查看器应用程序,用户可以在其中单击任何表情符号以从他们的收藏夹列表中添加/删除它。该列表也会localstorage
在每次更改时保存。我通过折叠点击流(在每次点击时添加或删除表情符号)使用xstream构建列表:
const favEmojis$ = clickFavEmoji$.fold(
(favList, selectedEmoji) =>
favList.includes(selectedEmoji)
? favList.filter(emoji => emoji !== selectedEmoji)
: [...favList, selectedEmoji],
[]
);
我可以使用@cycle/storage驱动程序将此流保存localStorage
并加载到页面上:
const storageRequest$ = favEmojis$.map(favEmojis => ({
key: "favEmojis",
value: JSON.stringify(favEmojis)
}));
...
return {
DOM: vdom$,
...
storage: storageRequest$
};
}
但是,我无法弄清楚如何将数组从 localStorage 预加载到最喜欢的流中。从 加载数组后localStorage
,我尝试以favEmojis$
我能想到的各种方式将其与流合并/连接。例如:
const storedEmojis$ = localStorage
.getItem("favEmojis")
.map(favEmojis => (favEmojis ? JSON.parse(favEmojis) : []))
.take(1);
const combinedFav$ = xs.merge(storedEmojis$, favEmojis$);
但这不起作用 - 数组 fromlocalstorage
被折叠clickFavEmoji
流覆盖。如果有人能指出我正确的方向,我将不胜感激。
注意完整的代码很长,所以我只包括了看起来最相关的部分。