Могу ли я редактировать компоненты React без перезагрузки браузера?

Если React предлагает согласование DOM, можно ли динамически перезагружать код компонента и повторно отображать его после того, как я его отредактирую?

Я ищу решение, которое позволяет мне редактировать файл JSX, сохранять его и обновлять сам компонент в браузере, не перезагружая страницу, не отключая ее и не теряя ее состояния.

В идеале это должно работать без плагинов для браузера.


person Dan Abramov    schedule 24.07.2014    source источник


Ответы (2)


Вы можете использовать react-hot-loader, -in загрузчик Webpack, который позволяет редактировать компоненты React в ваших проектах в режиме реального времени. Никаких плагинов для браузера или хуков IDE не требуется.

Он объединяет горячую замену модуля (HMR) Webpack с React.

Вы можете использовать это, если:

Как это работает:

Существует демонстрационное видео, пояснительный пост в блоге и Вилка обучающего приложения React с настроенным живым редактированием.

И это все ванильный JS.

person Dan Abramov    schedule 24.07.2014
comment
вы можете сделать это способом Дэна с помощью Webpack. Если вы используете RequireJS/AMD и хотите начать использовать React, я создал самодельное решение для горячей перезагрузки для RequireJS + React, см. мой ответ - person Alexander Mills; 20.09.2015

Вы можете, и я создал пример проекта, демонстрирующий, как создавать эти средства для себя, используя ES5 и RequireJS — он работает с React, а также с Backbone — возможно, он может работать с Angular и Ember и т. д., если вы используете модули AMD и RequireJS. .

Вот вся информация: https://medium.com/@the1mills/hot-reloading-with-react-requirejs-7b2aa6cb06e1

основные шаги:

  1. Наблюдатели gulp.js прослушивают изменения файловой системы

  2. Сервер socket.io в файле gulpfile отправляет сообщение всем клиентам браузера с путем к измененному файлу

  3. клиент удаляет кеш, представляющий этот файл/модуль, и повторно требует его (используя AJAX для извлечения его из файловой системы сервера)

  4. внешнее приложение настроено/предназначено для повторной оценки всех ссылок на модули, которые оно хочет перезагрузить в горячем режиме, в этом случае для горячей перезагрузки доступны только представления JS, шаблоны и CSS — маршрутизатор, контроллеры, хранилища данных не настроен еще. Я подозреваю, что все файлы могут быть перезагружены в горячем режиме, за исключением хранилищ данных.

Вы можете увидеть пример проекта здесь: https://github.com/ORESoftware/hr4R

но я рекомендую сначала прочитать статью выше.

Это более простая реализация горячей перезагрузки своими руками, чем использование Babel/ES6 и React-Hot-Loader.

Webpack изначально не был разработан для горячей перезагрузки — если бы это было так, горячая перезагрузка больше не была бы экспериментальной функцией, и при этом он не использовал бы опрос для просмотра различий файловой системы, что он делает в настоящее время (см. мою статью).

Спецификация RequireJS/AMD в основном была создана для горячей перезагрузки, если подумать.

person Alexander Mills    schedule 20.09.2015