ClojureScriptをいじり始めたいのですが、いくつかの点に困惑しています。私の問題は、機能的に作業しようとするときに、ユーザーの対話から生じる状態の変化に対処するための良い方法です。
いくつか例を挙げましょう。ブラウザーで実行されるアプリケーションを念頭に置いていますが、問題はより一般的だと思います。もちろん、何かが変化します-少なくともDOMです。しかし、不変のデータ構造で動作するように残りのコードを整理する方法を見つけたいと思います。
1)イベントをDOMオブジェクトに添付したいとします。これは主に機能的な方法で行うのは難しくありません。ノードを作成するときに、さまざまなイベントハンドラーでハッシュマップをアタッチします。ただし、イベントの委任を使用している場合を考えてください。次に、新しいノードを作成するときに、おそらく既に存在する親ノードにイベントハンドラーをアタッチできます。そのため、既存のノードに関連付けられているハッシュを変更する必要があります。
2)入力フィールド用のオートコンプリートモジュールを設計しているとします。ユーザーがキーを押すたびに、提案を得るためにサーバーを呼び出すことができます。これは簡単です。しかし、今それを少し最適化したいと思います。一致するすべての結果foo
がわかっている場合は、一致するすべての結果を再度要求しても意味がありませんfoobar
。前者をフィルタリングできます。そのため、何らかのキャッシュを作成する必要があります。このキャッシュは、ユーザーが以前に入力した単語のスーパーセットではない新しい単語を挿入するたびに更新されます。繰り返しますが、キャッシュをどのようにモデル化するのですか?最も合理的な方法は、単語を結果にマッピングするハッシュマップのようですが、変更可能である必要があります。
ユーザーの操作による変更を機能設計に組み込むのを容易にするいくつかのパターンを提案できますか?