Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066

Как правильно инициализировать приложение написанное на реакте?

29.04.2020, 22:50. Показов 1303. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем привет.

На работе занялся рефакторингом прилодения написанного на реакте.
И столкнулся с такой ситуацией, что в проекте есть зависимости, которые как бы не встраиваются в лайфсайклы реакта.

Пример:
Есть роутер, к нему присоединяется history модуль, на этот history модуль идёт подписка и отправляются на сервер данные по взаимодействию пользователя со страницей (ака отслеживание куда он переходил и т.п.), а так же, как замена старому, встроенна новая система которая называется piwik (по сути то же самое, только не самописное) с новыми возможностями, так же подписывается на history.

Сейчас в проекте инициализация подписки грубо говоря происходит в index.ts и history передаётся в Router компонент.
Так вот, одной из новых "фишек" этой piwik является то, что можно передать email пользователя и конкретно понимать кто это.
(не вглубляясь в подробности) пользователя мы запрашиваем только когда происходит componentWillMount (или что там), запросом на сервер, в App реакт модуле и пропагируется в стейт и т.п. для дальнейшего использования в разных компонентах апликации.

Так вот, теперь вопрос:

Какие паттерны есть, для того, что бы при инициализации history до того как мы рендерим реакт, у нас уже был доступ к пользователю, при этом, не делая дополнительные запросы, что бы поместить его потом в глобальный стейт.

Как устроить приложение так, что бы те инициализации библиотек, которые нужны для работы приложения и которые не являются компонентами реакта самими по себе работали вместе с глобальным стейтом и с реакт компонентами, и там где запросы пересекаются их не дублировать?


Как один из теоретических вариантов я вижу, что мы можем создать контекст с history экземпляром в качестве значения и далее написав реакт компонент высшего порядка подписаться на этот стейт и делать отправку данных на сервер и на piwik,
но при этом, если у нас будет "другой" модуль, который будет не только подписываться, а так же расширять возможности history (т.е. нужно сделать history = someEnhancement(history)), то я не очень понимаю как это можно сделать в контексте..
а если выносить эту часть логики, то почему бы не вынести всё?.. вопрос - как правильно и какие паттерны есть?


(данный пример с history частный случай, я больше чем уверен что куча таких библиотек, которые надо инициализировать и расширять до того как использовать в реакт компонентах.. и какой подход есть для "всех" такие библиотек и стучаев)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2020, 22:50
Ответы с готовыми решениями:

Как добавить изображение в приложение, написанное на WinApi?
здравствуйте! подскажите, как добавить изображение в приложение, написанное на winapi?желательно подробнее. заранее спасибо.

Как запустить приложение вне браузера, написанное на PhoneGap?
Собственно, вопрос в сабже. Для чего это надо: Кто сталкивался с политикой Steam, знает, что они принимают только приложения и игры,...

Можно ли как то освободить написанное приложение от наличия фреймворка?
Можно ли как то освободить написанное приложение от наличия фреймворка? Так сказать вставить в готовое приложение не ссылки на...

2
108 / 76 / 27
Регистрация: 14.11.2016
Сообщений: 260
01.05.2020, 16:38
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
Какие паттерны есть, для того, что бы при инициализации history до того как мы рендерим реакт, у нас уже был доступ к пользователю, при этом, не делая дополнительные запросы, что бы поместить его потом в глобальный стейт.
если нужно передать сохраненный user.email - это работа с сессией (cookies или JWT)
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
Как устроить приложение так, что бы те инициализации библиотек, которые нужны для работы приложения и которые не являются компонентами реакта самими по себе работали вместе с глобальным стейтом и с реакт компонентами, и там где запросы пересекаются их не дублировать?
Всеми любимый принцип DRY: если и новая, и самописная библиотека делают одно и то же, то зачем они обе?
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
нужно сделать history = someEnhancement(history)
а нефиг изменять структуру history, делай чистую функцию:
JavaScript
1
2
3
history = Object.assign({}, history, someEnhancement(history));
// или
history = {...history, someEnhancement(history)};
надеюсь, я правильно понял твои нужды, и что-то из моих советов поможет тебе!
0
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
13.05.2020, 23:38  [ТС]
Цитата Сообщение от shsv382 Посмотреть сообщение
надеюсь, я правильно понял

нет, не правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2020, 23:38
Помогаю со студенческими работами здесь

[Mono] Есть приложение написанное в VS на С#. С помощью чего и как его можно запустить в Linux?
народ если не трудно уделите мне внимание и по возможности помогите!!!! Есть приложение написанное в VS на С# с помощью чего и как его...

Как запустить приложение, написанное на Java Web (war), без среды ( не используя Netbeans)? Нужен сборщик?
Написал в Netbeans 7.01 веб-приложение Java Web, использования JSF (на сервере GlassFish 3.0). Что нужно сделать, чтобы это веб-приложение...

Как правильно инициализировать конструктор?
Так? Construct() { a = 0; } или так?

Как правильно инициализировать массив?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Как правильно инициализировать свойства объекта?
Добрый день, товарищи-форумчане! Помогите с VB net. Имеется следующий класс Partial Public Class pledgeNotificationPackageType ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru