Мені хотілося б почати хитрувати з ClojureScript, але я спантеличений деякими моментами. Моя проблема полягає в тому, що є хорошим способом боротьби зі змінами стану, що виникають в результаті взаємодії з користувачем, коли ви намагаєтесь працювати функціонально.
Дозвольте навести пару прикладів. Я маю на увазі програми, які працюють у браузері, але я вважаю, що питання є більш загальним. Звичайно, щось зміниться - як мінімум, DOM. Але я хотів би дізнатися, як організувати решту коду для роботи з незмінними структурами даних.
1) Скажіть, що я хочу приєднати деякі події до якогось об'єкта DOM. Це не важко зробити в основному функціональним способом: коли ви створюєте вузол, додаєте до нього хеш-карту з різними обробниками подій. Але розглянемо випадок, коли ви використовуєте делегування подій. Потім, коли ви створюєте новий вузол, ви можете приєднати обробник подій до якогось батьківського вузла, який, ймовірно, вже існує. Тож вам доведеться змінити хеш, пов'язаний з уже існуючим вузлом.
2) Скажіть, я проектую модуль автозаповнення для поля введення. Щоразу, коли користувач натискає клавішу, я можу зателефонувати на сервер, щоб отримати пропозиції. Це легко. Але тепер припустимо, я хочу трохи її оптимізувати. Якщо я знаю, що всі результати відповідають foo
, немає сенсу знову запитувати про відповідність усіх результатів foobar
; Я можу просто відфільтрувати колишнє. Тому мені потрібно побудувати якийсь кеш. Цей кеш оновлюватиметься кожного разу, коли користувач вставить нове слово, яке не є набором раніше введених слів. Знову: як я моделюю кеш? Найбільш розумним способом, здається, є хеш-карта зіставлення слів за результатами, але він повинен бути змінним.
Чи можете ви запропонувати деякі зразки, які полегшили б включити зміни у взаємодію користувачів з функціональним дизайном?