Я создаю простое приложение React Flux js, похожее на TodoList, базовая функциональность которого заключается в операциях CRUD на некоторых объектах. Когда приложение запускает, он извлекает данные с сервера и отображает список элементов, затем я могу создать новый элемент, используя форму, отредактировать и удалить. Я решил попробовать подход Immutable.js, но столкнулся с вопросом: когда и какие данные следует преобразовать в неизменяемые объекты. Например, когда я выбираю список, я делаю его неизменным (Immutable.fromJS()), а затем назначаю состояние хранилища, правильно? Но затем я создаю новый элемент, получаю простой объект из полей формы и должен каким-то образом размещать эти данные на сервере. Чтобы избежать загрузки списка снова, я хочу добавить этот новый элемент в список неизменяемых магазинов. Итак, как мне работать с такими ситуациями, когда мне нужно преобразовать некоторые объекты в неизменяемые для использования приложения, а также получить и отправить данные на сервер с помощью простого json?Immutable.js конвертирует полученные данные в неизменяемые
ответ
Вы хотите сделать все свои объекты неизменными. Единственный момент, когда вы конвертируете его в изменяемый объект, - это когда вам нужно отправить его на сервер. И так как вы возвращаете простой объект JSON с сервера, вы конвертируете его в неизменяемый объект, когда вы его извлекаете.
Когда вы создаете новый элемент, вам также нужен неизменяемый объект, который вы отправляете в магазин. Таким образом, состояние магазина - это всего лишь куча неизменных объектов внутри неизменяемого вектора. Тот факт, что вам нужно отправлять объекты JSON на сервер, является детальность реализации связи с сервером, и это должно быть известно только магазину/службе, которая обрабатывает сообщение.
Так поток будет:
- Fetch элементы с сервера в виде массива JSON объектов
- Преобразовать что JSON массив неизменного вектора неизменных записей
- Pass, который неизменен вектор к вашему компоненты для их рендеринга
- При редактировании/создании новых элементов убедитесь, что вы имеете дело только с неизменяемыми записями (то есть держите неизменную запись
newItem
наthis.state
в компоненте и обновляете эту запись при заполнении полей формы изменение). - Когда пользователь нажал кнопку «Сохранить», отправьте
this.state.newItem
в магазин, который добавит элемент в неизменяемый вектор, а также преобразует его в JSON и отправляет на сервер.
Очистить пояснения! Я надеюсь, что кто-то может также ссылаться на какой-то примерный код, используя этот способ реакции на визуализацию формы с использованием immutable.js, поскольку до сих пор я вижу только отдельный код от immutable.js –
- 1. Immutable.js добавить новые данные
- 2. Haskell Неизменяемые данные
- 3. Неизменяемые данные и блокировка
- 4. Неизменяемые данные в асинхронных системах
- 5. Данные, полученные в laravel
- 6. Immutable.js и машинописный код
- 7. Пустые данные, полученные json
- 8. nsjsonserialization.jsonobjectwithdata truncating полученные данные
- 9. Изменить данные, полученные обещанием?
- 10. данные отображения, полученные в DataReceivedHandler
- 11. Несбалансированные данные, полученные в Storm
- 12. Полученные данные Анализ в Python
- 13. Сохранить полученные данные в java
- 14. Socket буферизует полученные данные
- 15. Измените полученные данные JSON
- 16. Сохранить данные, полученные
- 17. полученные данные WordPress wp_dropdown_categories
- 18. данные, полученные от ответа
- 19. Неизменяемые подклассы
- 20. Управляемый компонент ReactJS и неизменяемые данные
- 21. конвертирует данные в несколько индексных данных.
- 22. Зачем нужны неизменяемые состояния для redux
- 23. Возможно ли обновить полученные данные
- 24. AJAX: данные кодирования, полученные ajax
- 25. Ошибочные данные, полученные из ListView
- 26. Stream.Read не возвращает полученные данные
- 27. POST Данные, полученные из функции
- 28. проанализировать полученные данные из api
- 29. Данные, полученные с помощью Angularjs
- 30. Плохие данные, полученные от cudaMemcpy2D
Вы также можете проверить https://github.com/engineforce/ImmutableAssign, который поддерживает неизменность и позволяет продолжить работу с POJO (обычным старым JavaScript-объектом). – engineforce