我想开始摆弄ClojureScript,但是我对某些要点感到困惑。我的问题是,当您尝试进行功能性工作时,什么是应对来自用户交互的状态更改的好方法?
让我举几个例子。我考虑过在浏览器中运行的应用程序,但是我认为这个问题更为普遍。当然,某些事情将会改变-至少是DOM。但我想了解如何组织其余代码以使用不可变数据结构。
1)说我想将一些事件附加到某些DOM对象。这在大多数情况下都不是很难做到的:在创建节点时,将其附加有各种事件处理程序的哈希映射。但是考虑使用事件委托的情况。然后,在创建新节点时,可以将事件处理程序附加到可能已经存在的某个父节点。因此,您将不得不更改与现有节点关联的哈希。
2)说我正在为输入字段设计一个自动完成模块。每次用户按下一个键,我都可以致电服务器以获取建议。这很简单。但是现在假设我想对其进行一些优化。如果我知道所有结果都匹配,foo
那就没有必要再要求所有结果匹配了foobar
; 我可以过滤前者。所以我需要建立某种缓存。每当用户插入一个新单词(而不是先前输入的单词的超集)时,此缓存就会更新。再说一遍:如何为缓存建模?最合理的方法似乎是将单词映射到结果的哈希映射,但是它应该是可变的。
您能否提出一些模式,以使其更容易将由于用户交互而引起的更改合并到功能设计中?