Компонент реактив: Компонент-реактив

Содержание

Компонент-реактив

 

Уважаемые партнеры сообщаем Вам, что ООО «Компонент-Реактив»:

 

  • работает на химическом рынке более 30 лет;
  • в 2018г провел модернизацию своих производственных мощностей, внедрив ряд новых технологических новшеств;
  • увеличил объемы производства, что позволило снизить цены на ряд ключевых продуктов
  • в этом и последующие годы предусмотрено освоение новых продуктов — следите за нашим сайтом!

 

Снижены цены на ряд Неорганических реактивов с 06.02.2020г:

Аскорбиновая кислота, Винная кислота, Лимонная кислота, Молочная кислота, Сульфосалициловая кислота, Фумаровая кислота, Щавелевая кислота, Янтарная кислота, Калий-натрий виннокислый, Натрий уксуснокислый, Натрий щавелевокислый, Тиомочевина, Цинк щавелевокислый, Азотная кислота, Пирофосфорная кислота, Полифосфорная кислота, Сульфаминовая кислота, Алюминий фосфорнокислый, Алюминий хлористый, Аммоний хлористый, Железо хлорид, Калий азотнокислый, Калий-алюминий сульфат, Калий марганцовокислый, Калий сернокислый, Калий фосфорнокислый, Калий хлористый, Кальций азотнокислый, Кальций фосфорнокислый, Литий сернокислый, Литий хлористый безводный, Магний хлористый, Натрий сернистокислый, Натрий сернокислый, Натрий тетраборнокислый, Натрий фосфорнокислый, Натрий хлористый, Никель сернокислый, Цинк сернокислый.

 

Снижены цены на ряд Органических растворителей:

Ацетон, Бутанол-н, Бутилацентат, Гексан, Гептан, Глицерин, Диметилацетамид, Диметилформамид, Диоксан, Дихлорэтан, Диэтиленгликоль, Изоамиловый спирт, Изобутиловый спирт, Изооктан, Изопропиловый спирт, Ксилол, Метилен хлористый, Метилизобутилкетон, Метилпирролидон, Метилтретбутиловый эфир, Метилэтилкетон, Монометиланилин, Моноэтаноламин, Перхлорэтилен, Пропилацетат-н, Пропиленгликоль, Толуол, Трихлорэтилен, Триэтиламин, Хлороформ, Циклогексанон, Этилацетат.

КОМПОНЕНТ-РЕАКТИВ ООО — Москва и Московская область

Адрес:
111024, Москва, Энтузиастов ш., д. 23, корп. 2, оф. 17 (ближайшее метро — Авиамоторная ~930 м)

Телефон:
  • +7 (495) 5455378
  • +7 (495) 5403595

  • Факс:
  • +7 (495) 6733497

  • Сайт:
    http://www.component-reaktiv.ru
    Описание:
    КОМПОНЕНТ-РЕАКТИВ

    Рубрики:

    Ближайшие станции метро

    Сводные данные КОМПОНЕНТ-РЕАКТИВ

    В телефонном справочнике Moscowpage.ru компания компонент-реактив расположена в разделе «Промышленность», в рубриках «Химические реактивы» и «Химическая промышленность» под номером 116431.

    Общество с ограниченной ответственностью КОМПОНЕНТ-РЕАКТИВ находится в городе Москва по адресу Энтузиастов ш., д. 23, корп. 2. Ближайшие станции метро: Авиамоторная — 930 м, Шоссе Энтузиастов — 1.47 км, Семёновская — 3.01 км. Почтовый индекс: 111024.

    Вы можете связаться с представителем организации по телефону +7(495) 545-53-78 и +7(495) 540-35-95 или отправить факс на номер +7(495) 673-34-97. Для более подробной информации, посетите официальный сайт КОМПОНЕНТ-РЕАКТИВ ООО, расположенный по адресу http://www.component-reaktiv.ru.

    Режим работы КОМПОНЕНТ-РЕАКТИВ ООО рекомендуем уточнить по телефону +74955455378.

    Если вы заметили неточность в представленных данных о компании КОМПОНЕНТ-РЕАКТИВ, сообщите нам об этом, указав при обращении ее номер — № 116431.

    Cтраница организации просмотрена: 49 раз

    О компании:
    Редактировать описание

    Отзывы о компании КОМПОНЕНТ-РЕАКТИВ

    Не опубликовано ни одного отзыва. Добавьте свой отзыв о компании!

    В рубрике «Химические реактивы» также находятся следующие организации:
    РОСЧЕРК-1
    Адрес: 105203, Москва, Парковая 14-я ул., д. 8
    ХРОМСТИЛЬ
    Адрес: 129090, Москва, Протопоповский пер., д. 25б, а/я 122
    СИНТОС К КОМПАНИЯ
    Адрес: 117546, Москва, Подольских Курсантов ул., д. 15, стр. 2
    КРОССЛЭНД
    Адрес: 115230, Москва, Нагатинская ул., д. 2/2
    РЕАКТИВ ПРЕДСТАВИТЕЛЬСТВО
    Адрес: 109316, Москва, Волгоградский просп., д. 26, оф. 1003
    СИГМА-АЛДРИЧ РУС
    Адрес: 105062, Москва, Макаренко ул., д. 2/21, стр. 1, оф. 22
    ЛАБТЕХПРИБОР
    Адрес: 115230, Москва, Варшавское ш., д. 51, корп. 2
    МОСРЕАКТИВ БАЗА №1 ХИМРЕАКТИВОВ
    Адрес: 142450, Старая Купавна, Дорожная ул., д. 4
    DBH OSTHANDELSGESELLSCHAFT MBH ПРЕДСТАВИТЕЛЬСТВО
    Адрес: 119313, Москва, Ленинский просп., д. 95а
    АЗУР ФИРМА
    Адрес: 113054, Москва, Стремянный пер., д. 9, корп. 1
    АЛЕКСАНДР
    Адрес: 117546, Москва, Подольских Курсантов ул., д. 15
    АЛЬМАЛАБ
    Адрес: 119899, Москва, Ленинские Горы, д. 1, корп. 40
    АЛЬТАИР-ПРОФИ
    Адрес: 123290, Москва, Магистральный 1-й туп., д. 11
    АМБЕР
    Адрес: 125130, Москва, Нарвская ул., д. 2, стр. 1, оф. 33
    БАРС ЭКОЛОГИЯ
    Адрес: 119002, Москва, Серебрянический пер., д. 5
    БАУМ-ЛЮКС
    Адрес: 127220, Москва, Фридриха Энгельса ул., д. 58, а/я 4
    ВЕЛКОМС+ХЕМИ
    Адрес: 123104, Москва, Богословский пер., д. 12, стр. 1, оф. 15
    ИРЕА ОПЫТНО-ЭКСПЕРИМЕНТАЛЬНЫЙ ЗАВОД
    Адрес: 129345, Москва, Осташковская ул., д. 14
    КЛАРИАНТ КОНСАЛТИНГ АО
    Адрес: 117418, Москва, Новочеремушкинская ул., д. 61, эт. 5, оф. 501
    КОМПОНЕНТ-РЕАКТИВ
    Адрес: 111024, Москва, Энтузиастов ш., д. 23, корп. 2, оф. 17
    КРОССЛЭНД
    Адрес: 115230, Москва, Нагатинская ул., д. 2/2
    ЛАБТЕХПРИБОР
    Адрес: 115230, Москва, Варшавское ш., д. 51, корп. 2
    МИЛЛАБ КОМПАНИЯ
    Адрес: 107410, Москва, Алтуфьевское ш., д. 43, корп. 1
    МИР РЕАКТИВОВ НПЦ
    Адрес: 119994, Москва, Ленинский просп., д. 47
    В рубрике «Химическая промышленность» также находятся следующие организации:
    БЕЛИС ЗАО
    Адрес: Зеленоград г., 4806-й пр., д. 5, стр. 6, МИЭТ
    ЛАБОРАТОРИЯ ТРИБОТЕХНОЛОГИИ ООО
    Адрес: Зеленоград г., 4806-й пр., д. 6, НИИ Физических проблем им. Ф. В. Лукина ФГУП
    ФЛОРАХИМГРУППА
    Адрес: Зеленоград г., Савелкинский пр., д. 4, оф. 808
    ФРАСТ-М
    Адрес: Зеленоград г., корп. 814
    ХИМПОСТАВЩИК-М ЗАО
    Адрес: Зеленоград г., Западный 3-й пр., д. 8, стр. 1
    ХИМСНАБСБЫТ
    Адрес: Зеленоград г., корп. 602А
    СЕРТОВ ООО
    Адрес: Серпухов г., Химиков ул., д. 1
    РАДИАН ООО
    Адрес: Дзержинский г., Академика Жукова ул., д. 18
    СЕЛЕНА-ПЛАСТИК ЗАО
    Адрес: Королев г., Ватунина ул., д. 7
    ХИМСЕРВИС ЗАО
    Адрес: Королев г., Калининградская ул., д. 12
    ХИМПРОДУКТ
    Адрес: Люберцы г., Октябрьский просп., д. 259А
    ХРОМЛАБ ООО
    Адрес: Люберцы г., Вуги пос., территория Института Горного Дела
    3С КЕМИКАЛС ООО
    Адрес: Москва, Дербеневская наб., д. 7, стр. 16
    ARKEMA ПРЕДСТАВИТЕЛЬСТВО
    Адрес: 119049, Москва, Шаболовка ул., д. 2
    BOCHAKO CHEMIE UND TECHNIK GMBH ПРЕДСТАВИТЕЛЬСТВО
    Адрес: 117997, Москва, Обручева ул., д. 30
    BS & B
    Адрес: Москва, Ленинский просп., д. 146, Центральный Дом Туриста, оф. 602
    BYK-CHEMIE GmbH
    Адрес: Москва, д. 119, стр. 5, Мира Просп., ВВЦ , Технопарк
    CLEARWATER LLC ПРЕДСТАВИТЕЛЬСТВО
    Адрес: 101000, Москва, Уланский пер., д. 5, эт. 5, оф. 501
    DBH OSTHANDELSGESELLSCHAFT GmbH
    Адрес: Москва, Ленинский просп., д. 95А
    DONAU CARBON GmbH & Co.KG
    Адрес: Москва, Георгиевский пер., д. 1, стр. 2
    DYNASOL
    Адрес: Москва
    EXXON MOBIL CHEMICAL CENTRAL EUROPE GmbH (БЕЛЬГИЯ)
    Адрес: Москва, Новинский бул., д. 31
    HELM AG (ГЕРМАНИЯ)
    Адрес: Москва, Ленинский просп., д. 113/1, БЦ Парк Плейс Москоу, оф. Е314
    KONIMPEX
    Адрес: Москва, Дмитрия Ульянова ул., д. 16/2, оф. 520

    Популярная компания из рубрики Химические реактивы:

    ХИММЕД Москва

    отзывы клиентов и покупателей о компании

    А

    Абакан

    Абу-Даби

    Агидель

    Агрыз

    Адлер

    Азов

    Айхал

    Аксай

    Актобе

    Алапаевск

    Алейск

    Александров

    Алексеевка (Белгородская область)

    Алексин

    Алматы

    Алушта

    Альметьевск

    Амстердам

    Анапа

    Ангарск

    Анкара

    Апатиты

    Арамиль

    Аргун

    Армавир

    Арсеньев

    Артём

    Архангельск

    Асбест

    Асино

    Астрахань

    Атырау

    Ачинск

    Б

    Баку

    Балаково

    Балашиха

    Барнаул

    Батайск

    Бежецк

    Белгород

    Белово

    Белогорск

    Белорецк

    Белореченск

    Белоярский

    Березники

    Берёзовский

    Берлин

    Бийск

    Биробиджан

    Бишкек

    Благовещенск

    Благодарный

    Бобруйск

    Боготол

    Бодайбо

    Бокситогорск

    Бологое

    Болхов

    Большой Камень

    Боровск

    Братск

    Брянск

    Бугульма

    Буденновск

    Бузулук

    Бухара

    В

    Валуйки

    Варшава

    Великие Луки

    Великий Новгород

    Верхний Тагил

    Верхний Уфалей

    Верхняя Пышма

    Видное

    Вильнюс

    Винница

    Витебск

    Владивосток

    Владикавказ

    Владимир

    Волгоград

    Волгодонск

    Волжск

    Волжский

    Вологда

    Володарск

    Волхов

    Вольск

    Воркута

    Воронеж

    Воскресенск

    Воткинск

    Всеволожск

    Выборг

    Выкса

    Вытегра

    Вышний Волочек

    Вязники

    Вязьма

    Вятские Поляны

    Г

    Гагарин

    Гатчина

    Геленджик

    Георгиевск

    Глазов

    Гомель

    Горно-Алтайск

    Гороховец

    Горячий Ключ

    Грайворон

    Гродно

    Грозный

    Грязи

    Губкин

    Губкинский

    Гулькевичи

    Гусев

    Д

    Дедовск

    Десногорск

    Дзержинск

    Димитровград

    Дмитров

    Днепр (Днепропетровск)

    Долгопрудный

    Домодедово

    Донецк

    Дрезна

    Дубна

    Душанбе

    Дюртюли

    Е

    Евпатория

    Егорьевск

    Ейск

    Екатеринбург

    Елабуга

    Елец

    Еманжелинск

    Ереван

    Ессентуки

    Ж

    Жезказган

    Железногорск

    Железнодорожный

    Жигулевск

    Житомир

    Жуковский

    З

    Забайкальск

    Заволжье

    Заозерск

    Запорожье

    Зарайск

    Звенигород

    Зеленоград

    Зеленодольск

    Зеленокумск

    Зима

    Златоуст

    Знаменск

    И

    Иваново

    Ивантеевка

    Ижевск

    Избербаш

    Иланский

    Инта

    Иркутск

    Исилькуль

    Истра

    Ишим

    Ишимбай

    Й

    Йошкар-Ола

    К

    Казань

    Калининград

    Калтан

    Калуга

    Каменск-Уральский

    Каменск-Шахтинский

    Каменское

    Камышин

    Канаш

    Канск

    Караганда

    Карпинск

    Карши

    Касимов

    Качканар

    Кашира

    Кемерово

    Керчь

    Киев

    Кимовск

    Кимры

    Кингисепп

    Кинешма

    Кириши

    Киров

    Киров (Калужская область)

    Кировград

    Кисловодск

    Кишинев

    Климовск

    Клин

    Клинцы

    Ковров

    Ковылкино

    Когалым

    Коломна

    Колпино

    Комсомольск-на-Амуре

    Конаково

    Кондопога

    Копейск

    Коркино

    Королёв

    Корсаков

    Костомукша

    Кострома

    Котлас

    Краков

    Краматорск

    Красногорск

    Краснодар

    Красноперекопск

    Краснотурьинск

    Красноуральск

    Красноуфимск

    Красноярск

    Кривой Рог

    Кропивницкий

    Кропоткин

    Крымск

    Кстово

    Кубинка

    Кузнецк

    Кумертау

    Курган

    Курск

    Кущевская

    Кызыл

    Кыштым

    Л

    Лабинск

    Лангепас

    Лениногорск

    Ленск

    Лермонтов

    Лесной

    Ливны

    Ликино-Дулёво

    Липецк

    Лобня

    Лондон

    Луга

    Луховицы

    Лыткарино

    Люберцы

    М

    Магадан

    Магнитогорск

    Мадрид

    Майкоп

    Малаховка

    Малоярославец

    Мантурово

    Мариуполь

    Маркс

    Маркс

    Махачкала

    Мегион

    Межвежьегорск

    Междуреченск

    Миасс

    Минеральные Воды

    Минск

    Минусинск

    Мирный

    Михайлов

    Михайловка

    Михайловск

    Мичуринск

    Могилёв

    Мончегорск

    Москва

    Московская Область

    Муравленко

    Мурманск

    Муром

    Мытищи

    Мюнхен

    Н

    Набережные Челны

    Навашино

    Надым

    Назарово

    Назрань

    Нальчик

    Наро-Фоминск

    Нахабино

    Находка

    Невинномысск

    Нерюнгри

    Нефтекамск

    Нефтеюганск

    Нижневартовск

    Нижнекамск

    Нижнеудинск

    Нижний Новгород

    Нижний Тагил

    Нижняя Тура

    Николаев

    Нововоронеж

    Новокузнецк

    Новомосковск

    Новороссийск

    Новосибирск

    Новотроицк

    Новоуральск

    Новочебоксарск

    Новочеркасск

    Новый Уренгой

    Ногинск

    Норильск

    Ноябрьск

    Нукус

    Нур-Султан

    Нюрнберг

    Нягань

    Нязепетровск

    О

    Обнинск

    Обухово

    Одесса

    Одинцово

    Озерск

    Октябрьский

    Оленегорск

    Омск

    Онега

    Опочка

    Орел

    Оренбург

    Орехово-Зуево

    Орск

    Осло

    Осташков

    Оха

    П

    Павлово

    Павловск

    Павловский Посад

    Павлодар

    Папенбург

    Певек

    Пенза

    Первоуральск

    Переславль-Залесский

    Пермь

    Петрозаводск

    Петропавловск

    Петропавловск-Камчатский

    Печора

    Питкяранта

    Плавск

    Пласт

    Подольск

    Подпорожье

    Покров

    Полевской

    Полысаево

    Полярный

    Поронайск

    Посёлок Афипский

    Посёлок Ахтырский

    Поселок Белоозёрский

    Поселок Любучаны

    Поселок Таксимо

    Прага

    Прокопьевск

    Протвино

    Прохладный

    Псков

    Пугачев

    Пушкин

    Пушкино

    Пущино

    Пыть-Ях

    Пятигорск

    Р

    Радужный

    Райчихинск

    Раменское

    Рассказово

    Ревда

    Реутов

    Речица

    Ржев

    Родники

    Рославль

    Россошь

    Ростов-на-Дону

    Рубцовск

    Рыбинск

    Ряжск

    Рязань

    С

    Саки

    Салават

    Салехард

    Сальск

    Самара

    Санкт-Петербург

    Саранск

    Сарапул

    Саратов

    Саров

    Саяногорск

    Севастополь

    Северобайкальск

    Северодвинск

    Северск

    Сегежа

    Село Дубовское (Ростовская область)

    Село Кожевниково (Томская область)

    Село Сабетта

    Сергиев Посад

    Серебряные Пруды

    Серов

    Серпухов

    Сибай

    Симферополь

    Скопин

    Славгород

    Славянск-на-Кубани

    Сланцы

    Смоленск

    Сморгонь

    Снежинск

    Советск

    Советская Гавань

    Соликамск

    Солнечногорск

    Сорочинск

    Сосновый Бор

    Сочи

    Ставрополь

    Станица Динская

    Станица Ильская

    Станица Ленинградская

    Станица Отрадная

    Станица Северская

    Станица Холмская

    Старая Русса

    Старый Оскол

    Стерлитамак

    Стрежевой

    Струнино

    Ступино

    Судак

    Суджа

    Судогда

    Суздаль

    Сургут

    Сызрань

    Сыктывкар

    Т

    Таганрог

    Талдом

    Тамбов

    Ташкент

    Таштагол

    Тбилиси

    Тверь

    Темрюк

    Тимашевск

    Тихвин

    Тихорецк

    Тобольск

    Тольятти

    Томилино

    Томск

    Топки

    Троицк

    Туапсе

    Туймазы

    Тула

    Туринск

    Тучково

    Тында

    Тюмень

    У

    Удомля

    Улан-Удэ

    Ульяновск

    Урюпинск

    Усинск

    Уссурийск

    Усть- Илимск

    Усть-Илимск

    Усть-Лабинск

    Уфа

    Ухта

    Ф

    Феодосия

    Фрязино

    Фурманов

    Х

    Хабаровск

    Ханты-Мансийск

    Харьков

    Хасавюрт

    Херсон

    Химки

    Ц

    Цюрих

    Ч

    Чайковский

    Чайковский

    Чапаевск

    Чебоксары

    Челябинск

    Черемхово

    Черепаново

    Череповец

    Черкесск

    Черняховск

    Чехов

    Чикаго

    Чистополь

    Чита

    Чкаловск

    Ш

    Шадринск

    Шарыпово

    Шатура

    Шахты

    Шелехов

    Шимановск

    Шимкент

    Шлиссельбург

    Шумерля

    Шуя

    Щ

    Щёкино

    Щелково

    Щербинка

    Щецин

    Э

    Эдинбург

    Электросталь

    Элиста

    Энгельс

    Ю

    Югра

    Южно-Сахалинск

    Южноуральск

    Юрьевец

    Я

    Якутск

    Ялта

    Ялуторовск

    Янаул

    Ярославль

    Ясногорск

    Яхрома

    ООО «КОМПОНЕНТ-РЕАКТИВ» — г. Москва — ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ «КОМПОНЕНТ-РЕАКТИВ»

    Основной
    46.90Торговля оптовая неспециализированная
    Дополнительные
    20.13Производство прочих основных неорганических химических веществ
    20.14Производство прочих основных органических химических веществ
    20.30Производство красок, лаков и аналогичных материалов для нанесения покрытий, полиграфических красок и мастик
    20.59.5Производство прочих химических продуктов, не включенных в другие группировки
    28.11Производство двигателей и турбин, кроме авиационных, автомобильных и мотоциклетных двигателей
    28.12Производство гидравлического и пневматического силового оборудования
    28.41Производство металлообрабатывающего оборудования
    38.32.2Обработка отходов и лома драгоценных металлов
    38.32.5Обработка вторичного неметаллического сырья
    41.20Строительство жилых и нежилых зданий
    43.11Разборка и снос зданий
    43.21Производство электромонтажных работ
    43.22Производство санитарно-технических работ, монтаж отопительных систем и систем кондиционирования воздуха
    43.29Производство прочих строительно-монтажных работ
    43.31Производство штукатурных работ
    43.32Работы столярные и плотничные
    43.33Работы по устройству покрытий полов и облицовке стен
    43.34Производство малярных и стекольных работ
    43.39Производство прочих отделочных и завершающих работ
    43.91Производство кровельных работ
    43.99Работы строительные специализированные прочие, не включенные в другие группировки
    43.99.1Работы гидроизоляционные
    46.12Деятельность агентов по оптовой торговле топливом, рудами, металлами и химическими веществами
    46.13Деятельность агентов по оптовой торговле лесоматериалами и строительными материалами
    46.14Деятельность агентов по оптовой торговле машинами, промышленным оборудованием, судами и летательными аппаратами
    46.49Торговля оптовая прочими бытовыми товарами
    46.69Торговля оптовая прочими машинами и оборудованием
    46.75Торговля оптовая химическими продуктами
    62.01Разработка компьютерного программного обеспечения
    62.09Деятельность, связанная с использованием вычислительной техники и информационных технологий, прочая
    63.11Деятельность по обработке данных, предоставление услуг по размещению информации и связанная с этим деятельность
    63.11.1Деятельность по созданию и использованию баз данных и информационных ресурсов
    68.10Покупка и продажа собственного недвижимого имущества
    68.20Аренда и управление собственным или арендованным недвижимым имуществом
    69.20Деятельность по оказанию услуг в области бухгалтерского учета, по проведению финансового аудита, по налоговому консультированию
    71.20Технические испытания, исследования, анализ и сертификация
    72.19Научные исследования и разработки в области естественных и технических наук прочие
    73.11Деятельность рекламных агентств
    73.20Исследование конъюнктуры рынка и изучение общественного мнения
    74.30Деятельность по письменному и устному переводу
    77.32Аренда и лизинг строительных машин и оборудования
    77.33Аренда и лизинг офисных машин и оборудования, включая вычислительную технику
    77.39.2Аренда и лизинг прочих машин и оборудования, не включенных в другие группировки
    78.10Деятельность агентств по подбору персонала
    81.22Деятельность по чистке и уборке жилых зданий и нежилых помещений прочая
    82.92Деятельность по упаковыванию товаров
    82.99Деятельность по предоставлению прочих вспомогательных услуг для бизнеса, не включенная в другие группировки
    95.11Ремонт компьютеров и периферийного компьютерного оборудования

    ООО «КОМПОНЕНТ-РЕАКТИВ», реквизиты, адрес, телефон, контакты, отзывы, вакансии 2022

    Все компании • Добыча прочих полезных ископаемых • ООО «КОМПОНЕНТ-РЕАКТИВ»

    ООО «КОМПОНЕНТ-РЕАКТИВ»: адрес, телефон, факс, email, сайт, график работы

    ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ «КОМПОНЕНТ-РЕАКТИВ»

    Регион: Москва

    Адрес: 115088, г. МОСКВА, ул. ЮЖНОПОРТОВАЯ, д. 13, стр. 1

    Телефон: нет данных

    Факс: нет данных

    E-mail: нет данных

    Сайт: нет данных

    Генеральный директор / ответственное лицо / владелец ООО «КОМПОНЕНТ-РЕАКТИВ»: нет данных

    График работы:

    Нашли неточность в описании или хотите указать больше информации о компании? — Напишите нам!

    Подробная информация об ООО «КОМПОНЕНТ-РЕАКТИВ»: бухгалтерия, баланс. Скачать банковские реквизиты, тендеры, кредитная история, налоги ООО «КОМПОНЕНТ-РЕАКТИВ».

    ООО «КОМПОНЕНТ-РЕАКТИВ» реквизиты: инн, кпп, окопф, окогу, окпо, огрн, окато

    ОГРН: 1117746554133

    ИНН: 7723806042

    КПП:

    ОКПО: 92597299

    ОКАТО: 45290582000

    Получить выписку из ЕГРЮЛ об ООО «КОМПОНЕНТ-РЕАКТИВ»

    Фирма ООО «КОМПОНЕНТ-РЕАКТИВ» зарегистрирована 15 июля 2011 года. Регистратор – Межрайонная Инспекция Федеральной Налоговой Службы №46 по г. МОСКВЕ.

    Общества с ограниченной ответственностью

    Частная собственность

    Виды деятельности по ОКВЭД:
    Добыча прочих полезных ископаемых
    Добыча минерального сырья для химических производств и производства удобрений

    Работа в

    ООО «КОМПОНЕНТ-РЕАКТИВ» вакансии, практика, стажировка, карьера

    На данный момент открытых вакансий нет. Возможно вас заинтересуют вакансии в других компаниях:

    Бухгалтер на первичную документацию

    Менеджер по работе с партнерами

    Врач-гинеколог

    Педагог в школу скорочтения и развития интеллекта IQ007 Томск

    Специалист по делопроизводству

    Менеджер холодных продаж

    Администратор в фитнес клуб

    Водитель такси на автомобиле компании

    Помощник комплектовщика склада постельного белья

    Грузчик на склад одежды

    Агент НПФ

    Кассир (Эльмаш)

    Отзывы об ООО «КОМПОНЕНТ-РЕАКТИВ»

    Отзывы об ООО «КОМПОНЕНТ-РЕАКТИВ». Оставить отзыв об ООО «КОМПОНЕНТ-РЕАКТИВ» в социальных сетях

    Карта проезда к ООО «КОМПОНЕНТ-РЕАКТИВ» где находится

    Также смотрите компании и организации с похожим видом деятельности, как у ООО «КОМПОНЕНТ-РЕАКТИВ»: ООО «ГЛОБУС» | ТОО «БЛОК» | ООО «ЭМЕРАЛД ГРИН» | ООО «ВОЛКРАН» | ООО «КАРЬЕР «ДАЛЬНИЙ»

    Компания зарегистрирована 15 июля 2011 года (Межрайонная Инспекция Федеральной Налоговой Службы №46 по г. МОСКВЕ). Полное название: ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ «КОМПОНЕНТ-РЕАКТИВ», ОГРН: 1117746554133, ИНН: 7723806042. Регион: Москва. Фирма ООО «КОМПОНЕНТ-РЕАКТИВ» расположена по адресу: 115088, г. МОСКВА, ул. ЮЖНОПОРТОВАЯ, д. 13, стр. 1. Основной вид деятельности: «Добыча прочих полезных ископаемых / Добыча минерального сырья для химических производств и производства удобрений».

    ООО «Компонент-реактив» Россия — Отзывы сотрудников компании

    2016-06-01 01:33 Никнейм: Аноним, г. Москва

    Очень старый отель, если можно его так назвать. Кровати, тумбы, стулья все времен царя гороха. Но это не очень печалит, так приезжаешь не в номере сидеть. Природа красивая. Велосипеды в отличном состоянии. Еда очень вкусная, ОГРОМНОЕ спасибо поварам! Голодным никогда не будешь, много выбора. Сауны приличные очень. Мангальные площадки хорошие и за хорошие деньги, вот это конечно не очень хорошо. Деньги берут за саму площадку, причем не маленькие деньги, так еще и оплачивается отдельно решетка…>>

    2016-06-01 01:30 Никнейм: Аноним, г. Москва

    Люди. Не ездите по праздникам и выходным! Туда приезжает молодежь и начинает гулять до самого утра. Спать не дают, песни поют, администрация ничего не предпринимает. Я там была в праздники с детьми. А так кормят хорошо и очень красиво.

    2016-06-01 01:28 Никнейм: Аноним, г. Москва

    Отзыв о доме отдыха Компонент. Ужасное место: маленький пляж, маленькое не чистое озеро, корпуса и мебель советских времен, ржавые душ, раковина, вонючая вода, убирают в номерах когда они захотят (жили неделю, убирались 1 раз в 3 дня), очень жарко, нет даже вентиляторов, нет сейфов, приезжие в основном мамашки с детьми и пенсионеры. Начиная с пятницы был аншлаг — сдавали столовую под свадьбы (это дом отдыха или притон для всего? ), полупьяные гости ходили по территории, визжали и пели…>>

    2016-06-01 01:24 Никнейм: Аноним, г. Москва

    Мы с моей подружкой ездили в Компонент в июле. На самом деле, все зависит от компании и цели приезда. Если б я поехала с мамой, то я б померла от скуки! Нашли мы там с кем общаться, персонал и регбисты с велосипедистами. Значит, сели на электричку, приехали, взяли такси за 300 р. до Компонента. Мы приехали за час до заселения, оформили документы и сразу въехали, Анжела – администратор, очень приветливая женщина. Номер у нас был евро в 1ом элитном корпусе (позже мы были и в других, вот там…>>

    2016-06-01 01:22 Никнейм: Аноним, г. Москва

    Отличное местечко, был на выходных. Кормят вкусно, отличные сауны, бассейн, приветливый персонал. Так же был у друга на свадьбе, на летней веранде — не знаю, что там говорят все было вкусное и свежие. С удовольствием приеду еще раз.

    2016-06-01 01:20 Никнейм: Аноним, г. Москва

    Были в Компоненте недавно с друзьями. Очень весело провели время, не всё, конечно, идеально, но до этого ездили в Бухарово, так там вообще ужасно было, а тут понравилось.

    2016-06-01 01:19 Никнейм: Аноним, г. Москва

    Отличное ретро-местечко! Тем, кто хочет окунуться в атмосферу советских времён — это полностью подходит! Даже музыка там звучит из репродукторов какая-то советская попса)) очень трогательно) полно детей и спортсменов — всегда шумиха, очень напоминает пионерский лагерь. Столовая замечательная — питание простое и вкусное) от чистого совдепа отличает доброжелательный и отзывчивый персонал, дедушка у входа в спорткомплекс играет на гармошке- так умильно. Если бы название было «ностальгия по СССР «…>>

    2016-06-01 01:18 Никнейм: Аноним, г. Москва

    Сын отдыхал в студенческие каникулы. Спали в одежде, накрывшись 3-мя пледами, клали бутылки с горячей водой в кровать, чтобы согреться. Полотенец нет, это правда. В ванной ветер гуляет, желания принять душ никакого. В комнате из окон дует, хоть и заклеены. Обогреватель не дают. Вобщем, отдохнули. Единственный плюс — питание.

    2016-06-01 01:16 Никнейм: Аноним, г. Москва

    Отдыхала в Компоненте в начале февраля этого года одну неделю, за которую заметила и положительные и отрицательные стороны. При въезде нас встретил очень милый, интеллигентного вида вежливый охранник, который подробно разъяснил схему проезда и пожелал приятного отдыха. Далее администратор также очень дружелюбно к нам отнеслась и заселила в 6 корпус. Отмечу сразу, что персонал Компонента очень позитивен и отзывчив, кроме администраторов столовой и парня — бармена (эти довольно грубы с клиентами,…>>

    2016-06-01 01:14 Никнейм: Аноним, г. Москва

    Приезжали на выходные отметить мой день рождения. Нас трое: я, муж и маленькая дочка. В номерах тепло и относительно чисто, тумбочки старые, шторы пыльные, полы вытершиеся. Кровати короткие, доп. место в виде прогнувшейся к полу раскладушки. Ничего там нет интересного, кроме как сходить в столовую поесть, но и это последнее развлечение испорчено невкусной, ежедневно повторяемой едой. Суп с толстой пленкой жира, макароны самые дешевые, видно разогретые также на каком то слишком дешевом жире,…>> Подписаться

    ᐈ Компонент-Реактив у метро Авиамоторная — Лесная и химическая промышленность в Москве

    ООО «Компонент-Реактив» производит и реализует со склада в Москве растворители, спирты, кислоты и химреактивы реактивных квалификаций ОСЧ, ХЧ, ЧДА, Ч, для ЭВС , эталонный, для спектроскопии, для хроматографии (ВЖХ): аммиак водный, ацетон, ацетилацетон, бензойная к-та, ацетонитрил, борная к-та, бензол, бутанол, бутилацетат, винная к-та, гексан, гептан, глицерин, дибутилфталат, диметилацетамид, диметилдисульфид, диметилсульфоксид, диметилформамид, дихлорэтан, диэтиламин, диэтиленгликоль, диоксан, н-декан, додекан, ундекан, изооктан, изоамиловый спирт, изобутиловый спирт, изопропиловый спирт, ксилол, лимонная к-та, метиленхлорид, метилизобутилкетон, метилнафталин, метилпирролидон, метилизобутилкетон, метилэтилкетон (МЭК), метилтретбутиловый эвир (МТБЭ), монометиланилин, моноэтаноламин, муравьиная к-та, н-нонан, н-октан, о-ксилол, ортофосфорная к-та, перхлорэтилен, петролейные эфиры, пирофосфорная к-та, полифосфорная к-та, пентадекан, пентан, пиридин, пропанол-н, пропилацетат, пропиленгликоль, синтин (карбюризатор), сульфаминовая к-та, трихлорэтилен, серная к-та, соляная к-та, сульфосалициловая к-та, тетрагидрофуран, тетраэтоксисилан (ТЭОС), триэтиламин, хладон R141В, толуол, третбутиловый спирт, уксусная к-та, фтористоводородная к-та, фурфурол, хлороформ, хлорбензол, цетан (гексадекан), циклогексан, циклогексанол, циклогексанон, циклопентан, четырёххлористый углерод (ЧХУ), щавелевая к-та, этилацетат, этиленгликоль, этилцеллозольв, янтарная к-та, алюминия гидроокись, алюминий хлористый, бензоат натрия, калий едкий, лития гидроокись, натрия гидроокись, магния гидроокись, магний хлористы, оксалат калия, оксиды железа, диоксид титана, оксид бария, калий лимоннокислый 1-вод., литий хлористый калий щавелевокислый 1-вод., литий лимоннокислый 4-вод., магний лимоннокислый 4-вод., натрий лимоннокислый, натрий виннокислый, марганец диоксид, титана диоксид, цинк окись, фосфор пятиокись, барий сульфат, калий йодистый, калий тетраборат 4-вод., калий-титанил щавелевокислый, кальций хлористый 6-вод., калий фосфорнокислый двузам. 3-вод. кальций хлористый, кальций ортофосфат, кальций ортофосфат двузам. 2-вод., железо сернокислое, магний ортофосфат водный, магний ортофосфат, натрий хлористый, натрий тетраборнокислый 10-вод., натрий углекислый, натрий азотнокислый, медь сернокислая, магний хлористый 6-вод., алюминий, марганец, олово, свинец, цинк, натрий янтарнокислый 6-вод., натрий лимоннокислый, натрий серноватистокислый, алюминий фосфорнокислый однозамещённый, калий фосфорнокислый однозамещённый, калий щавелевокислый однозам.6-вод, калий янтарнокислый 6-вод, натрий щавелевокислый, натрий щавелевокислый однозам., цинк щавелевокислый, циркония оксид, натрий янтарнокислый 6-вод, литий фосфорнокислый, натрий сульфаминовокислый, натрий фосфорнокислый двузамещённый 12-вод., калий сульфат, калий сульфит, литий сульфат, литий сульфит, натрий сульфат, натрий сульфит, сера, медь, никель, кадмий, титан фосфорнокислый, хром, висмут, литий, натрий, реактив Фишера, реактив Грисса и т.д.. Фасовка от 0,5 кг.

    Описание скопировано с Yell.ru — https://www.yell.ru/moscow/com/komponent-reaktiv_10986488/

    Reagent: минималистичный React для ClojureScript

    Введение в Reagent

    Reagent предоставляет минималистичный интерфейс между ClojureScript и React. Это позволяет вам определить эффективный React компонентов, использующих только простые функции ClojureScript и данные, которые описывают ваш пользовательский интерфейс с помощью Hiccup-подобного синтаксис.

    Цель Reagent — сделать возможным определение произвольно сложные пользовательские интерфейсы, использующие всего пару основных концепций, и быть достаточно быстрым по умолчанию, чтобы вам редко приходилось думать о производительности.

    Очень простой компонент Реагента может выглядеть примерно так:

    скрыть

    Пример

    Я компонент!

    У меня полужирный и красный текст.

    Источник

     (определение простого компонента []
      [:дел
       [:p "Я компонент!"]
       [:p.некоторый класс
        "У меня есть" [:strong "жирный"]
        [:span {:style {:color "red"}} " and red "] "text."]]) 

    Вы можете создавать новые компоненты, используя другие компоненты как строительные блоки. Вот так:

    скрыть

    Пример

    Я включаю простой компонент.

    Я компонент!

    У меня полужирный и красный текст.

    Источник

     (определение простого родителя []
      [:дел
       [:p "Я включаю простой компонент."]
       [simple-component]]) 

    Данные передаются дочерним компонентам с помощью старого доброго Clojure типы данных. Вот так:

    Source

     (defn hello-component [имя]
      [:p "Здравствуйте, "имя"!"])
    
    (поздороваться []
      [hello-component "world"]) 

    Примечание: В приведенном выше примере hello-component может просто также были вызваны как обычная функция Clojure вместо в качестве реагентного компонента, т.е.{:key item} Часть выше на самом деле не нужна в этом простом примере, но прикрепляя уникальный ключ к каждому элементу в динамически генерируемом списке компонентов является хорошей практикой, и помогает React повысить производительность для больших списков. Ключ может быть задан либо (как в этом примере) как метаданные, либо как элемент :key в первом аргументе компонента (если он это карта). См. документацию React для получения дополнительной информации.

    Управление состоянием в Reagent

    Самый простой способ управлять состоянием в Reagent — использовать собственная версия атома .Он работает точно так же, как в clojure.core, за исключением того, что он отслеживает каждый раз, когда деф. Любой компонент, использующий атом , автоматически перерисовывается при изменении его значения.

    Продемонстрируем это на простом примере:

    Источник

     
     (пример ns
      (:require [regent.core :as r])) 
     (количество кликов по умолчанию (r/атом 0))
    
    (defn counting-component []
      [:дел
       "Атом" [:code "количество кликов"] "имеет значение: "
       @количество кликов"."
       [:input {:type "button" :value "Нажми на меня!"
                :on-click #(swap! click-count inc)}]]) 

    Иногда может потребоваться сохранить состояние локально в компонент. Это легко сделать и с атомом .

    Вот пример этого, где мы вызываем setTimeout каждый раз, когда компонент отображается в обновить счетчик:

    Источник

     (определить компонент таймера []
      (пусть [прошло секунд (r/атом 0)]
        (фн []
          (js/setTimeout #(своп! количество прошедших секунд) 1000)
          [:дел
           "Seconds Elapsed: " @seconds-elapsed]))) 

    В предыдущем примере также используется другая функция Reagent: a функция компонента может возвращать другую функцию, которая используется для выполнения собственно рендеринг.Эта функция вызывается с тем же аргументы как первый.

    Позволяет выполнить некоторые настройки только что созданного компонентов, не прибегая к событиям жизненного цикла React.

    Просто пропуская атом , вы можете поделиться управление состоянием между компонентами, например:

    Источник

     
     (пример ns
      (:require [реагент.ядро: as r])) 
     (определение атома-вход [значение]
      [: ввод {: введите "текст"
               :значение @значение
               :on-change #(reset! value (-> % .-целевое значение))}])
    
    (определение общего состояния []
      (пусть [val (r/атом "foo")]
        (фн []
          [:дел
           [:p "Теперь значение: " @val]
           [:p "Измените это здесь: " [atom-input val]]]))) 

    Примечание: Функции компонента могут вызываться с любым аргументы – пока они неизменны. Вы могли бы использовать изменяемые объекты, но тогда вы должны убедиться, что компонент обновляется при изменении ваших данных. Реагент предполагает по по умолчанию два объекта равны, если они являются одним и тем же объектом.

    Essential API

    Reagent поддерживает большую часть API React, но на самом деле есть только одна точка входа, необходимая для большинства приложений: react.dom/render .

    Принимает два аргумента: компонент и DOM-узел. Для например, разбрызгивание самого первого примера по всей странице приведет к выглядеть так:

    Источник

     
     (пример ns
      (:require [regent.dom :as rdom])) 
     (defn simple-component []
      [:дел
       [:p "Я компонент!"]
       [:п.какой-то класс
        "У меня есть" [:strong "жирный"]
        [:span {:style {:color "красный"}} " и красный "] "текст."]])
    
    (defn render-simple []
      (рдом/рендеринг
        [простой компонент]
        (.-body js/document))) 

    Собираем все вместе

    Вот чуть менее надуманный пример: простой ИМТ калькулятор.

    Данные хранятся в одном реагенте .core/atom : карта с ростом, весом и ИМТ в качестве ключей.

    Источник

     
     (пример ns
      (:требовать [реагент.core :as r])) 
     (defn calc-bmi [{:keys [рост вес bmi] :as data}]
      (пусть [ч(/высота 100)]
        (если (ноль? ИМТ)
          (ассоциированные данные: ИМТ (/ вес (* ч ч)))
          (сопутствующие данные: вес (* ИМТ ч ч)))))
    
    (def bmi-data (r/atom (calc-bmi {:рост 180 :вес 80})))
    
    (ползунок определения [значение параметра min max делает недействительным]
      [: input {: тип "диапазон" : значение значение : мин мин : макс макс
               :стиль {:ширина "100%"}
               : при смене (fn [e]
                            (пусть [новое значение (js/parseInt (.. e -target -value))]
                              (своп! ИМТ-данные
                                     (фн [данные]
                                       (-> данные
                                         (ассоциированное новое значение параметра)
                                         (dissoc делает недействительным)
                                         нач-бми)))))}])
    
    (определить bmi-компонент []
      (let [{:keys [вес рост bmi]} @bmi-data
            [диагностика цвета] (состояние
                              (< ИМТ 18.5) ["оранжевый" "недовес"]
                              (< ИМТ 25) ["наследовать" "нормально"]
                              (< ИМТ 30) ["оранжевый" "избыточный вес"]
                              :else ["красный" "толстый"])]
        [:дел
         [:h4 "Калькулятор ИМТ"]
         [:дел
          "Рост: " (внутренняя высота) "см"
          [слайдер :высота высота 100 220 :bmi]]
         [:дел
          "Вес: " (целый вес) "кг"
          [слайдер: вес вес 30 150: bmi]]
         [:дел
          "ИМТ:" (внутренний ИМТ) " "
          [:span {:style {:color color}} диагностика]
          [slider :bmi bmi 10 50 :weight]]])) 

    Производительность

    React сам по себе очень быстр, как и Reagent.На самом деле Реагент в большинстве случаев будет даже быстрее, чем простой React, благодаря оптимизация стала возможной благодаря ClojureScript.

    Смонтированные компоненты перерисовываются только тогда, когда их параметры изменились. Изменение может исходить из атома без ссылки , аргументов, переданных компоненту, или состояние компонента.

    Все эти проверяются на предмет изменений с идентичными? , который в основном является указателем сравнение, поэтому накладные расходы очень низкие.Карты, переданные в качестве аргументов с компонентами сравниваются одинаково: они считаются равными если все их записи идентичны. Это относится и к встроенным Компоненты React, такие как :div , :p и т. д.

    Все это означает, что вам просто не придется заботиться о производительность большую часть времени. Просто определите свой пользовательский интерфейс, как вам нравится – это будет достаточно быстро.

    Есть несколько ситуаций, о которых вам, возможно, придется позаботиться. о, однако. Если вы дадите Реагенту большую последовательность из компоненты для рендеринга, вам, возможно, придется снабдить их всех уникальный атрибут :key для ускорения рендеринга (см. над).Также обратите внимание, что анонимные функции, как правило, не равны друг другу, даже если они представляют один и тот же код и закрытие.

    Но опять же, в целом вы должны просто доверять тому, что React и Реагент будет достаточно быстрым. Эта самая страница состоит из одного Компонент-реагент с тысячами дочерних компонентов (каждый круглые скобки и т. д. в примерах кода являются отдельным компонентом), и тем не менее, страница может обновляться много раз в секунду без дополнительных затрат браузер малейший.

    Кстати, на этой странице также используется еще один прием React: вся страница предварительно визуализируется с использованием Node и react.dom.server/render-to-string . Когда он загружен в браузере, React автоматически прикрепляет обработчики событий к уже существующее дерево DOM.

    Reagent: минималистичный React для ClojureScript

    Введение в Reagent

    Reagent предоставляет минималистичный интерфейс между ClojureScript и React. Это позволяет вам определить эффективный React компонентов, использующих только простые функции ClojureScript и данные, которые описывают ваш пользовательский интерфейс с помощью Hiccup-подобного синтаксис.

    Цель Reagent — сделать возможным определение произвольно сложные пользовательские интерфейсы, использующие всего пару основных концепций, и быть достаточно быстрым по умолчанию, чтобы вам редко приходилось думать о производительности.

    Очень простой компонент Реагента может выглядеть примерно так:

    скрыть

    Пример

    Я компонент!

    У меня полужирный и красный текст.

    Источник

     (определение простого компонента []
      [:дел
       [:p "Я компонент!"]
       [:п.какой-то класс
        "У меня есть" [:strong "жирный"]
        [:span {:style {:color "red"}} " and red "] "text."]]) 

    Вы можете создавать новые компоненты, используя другие компоненты как строительные блоки. Вот так:

    скрыть

    Пример

    Я включаю простой компонент.

    Я компонент!

    У меня полужирный и красный текст.

    Источник

     (определение простого родителя []
      [:дел
       [:p "Я включаю простой компонент."]
       [simple-component]]) 

    Данные передаются дочерним компонентам с помощью старого доброго Clojure типы данных.Вот так:

    Source

     (defn hello-component [имя]
      [:p "Здравствуйте, "имя"!"])
    
    (поздороваться []
      [hello-component "world"]) 

    Примечание: В приведенном выше примере hello-component может просто также были вызваны как обычная функция Clojure вместо как компонент Реагент, т.е. со скобками вместо квадрата кронштейны. Единственная разница была бы в производительности, так как «Настоящие» компоненты реагентов перерисовываются только тогда, когда их данные изменились.{:key item} Часть выше на самом деле не нужна в этом простом примере, но прикрепляя уникальный ключ к каждому элементу в динамически генерируемом списке компонентов является хорошей практикой, и помогает React повысить производительность для больших списков. Ключ может быть задан либо (как в этом примере) как метаданные, либо как элемент :key в первом аргументе компонента (если он это карта). См. документацию React для получения дополнительной информации.

    Управление состоянием в Reagent

    Самый простой способ управлять состоянием в Reagent — использовать собственная версия атома .Он работает точно так же, как в clojure.core, за исключением того, что он отслеживает каждый раз, когда деф. Любой компонент, использующий атом , автоматически перерисовывается при изменении его значения.

    Продемонстрируем это на простом примере:

    Источник

     
     (пример ns
      (:require [regent.core :as r])) 
     (количество кликов по умолчанию (r/атом 0))
    
    (defn counting-component []
      [:дел
       "Атом" [:code "количество кликов"] "имеет значение: "
       @количество кликов"."
       [:input {:type "button" :value "Нажми на меня!"
                :on-click #(swap! click-count inc)}]]) 

    Иногда может потребоваться сохранить состояние локально в компонент. Это легко сделать и с атомом .

    Вот пример этого, где мы вызываем setTimeout каждый раз, когда компонент отображается в обновить счетчик:

    Источник

     (определить компонент таймера []
      (пусть [прошло секунд (r/атом 0)]
        (фн []
          (js/setTimeout #(своп! количество прошедших секунд) 1000)
          [:дел
           "Seconds Elapsed: " @seconds-elapsed]))) 

    В предыдущем примере также используется другая функция Reagent: a функция компонента может возвращать другую функцию, которая используется для выполнения собственно рендеринг.Эта функция вызывается с тем же аргументы как первый.

    Позволяет выполнить некоторые настройки только что созданного компонентов, не прибегая к событиям жизненного цикла React.

    Просто пропуская атом , вы можете поделиться управление состоянием между компонентами, например:

    Источник

     
     (пример ns
      (:require [реагент.ядро: as r])) 
     (определение атома-вход [значение]
      [: ввод {: введите "текст"
               :значение @значение
               :on-change #(reset! value (-> % .-целевое значение))}])
    
    (определение общего состояния []
      (пусть [val (r/атом "foo")]
        (фн []
          [:дел
           [:p "Теперь значение: " @val]
           [:p "Измените это здесь: " [atom-input val]]]))) 

    Примечание: Функции компонента могут вызываться с любым аргументы – пока они неизменны. Вы могли бы использовать изменяемые объекты, но тогда вы должны убедиться, что компонент обновляется при изменении ваших данных. Реагент предполагает по по умолчанию два объекта равны, если они являются одним и тем же объектом.

    Essential API

    Reagent поддерживает большую часть API React, но на самом деле есть только одна точка входа, необходимая для большинства приложений: react.dom/render .

    Принимает два аргумента: компонент и DOM-узел. Для например, разбрызгивание самого первого примера по всей странице приведет к выглядеть так:

    Источник

     
     (пример ns
      (:require [regent.dom :as rdom])) 
     (defn simple-component []
      [:дел
       [:p "Я компонент!"]
       [:п.какой-то класс
        "У меня есть" [:strong "жирный"]
        [:span {:style {:color "красный"}} " и красный "] "текст."]])
    
    (defn render-simple []
      (рдом/рендеринг
        [простой компонент]
        (.-body js/document))) 

    Собираем все вместе

    Вот чуть менее надуманный пример: простой ИМТ калькулятор.

    Данные хранятся в одном реагенте .core/atom : карта с ростом, весом и ИМТ в качестве ключей.

    Источник

     
     (пример ns
      (:требовать [реагент.core :as r])) 
     (defn calc-bmi [{:keys [рост вес bmi] :as data}]
      (пусть [ч(/высота 100)]
        (если (ноль? ИМТ)
          (ассоциированные данные: ИМТ (/ вес (* ч ч)))
          (сопутствующие данные: вес (* ИМТ ч ч)))))
    
    (def bmi-data (r/atom (calc-bmi {:рост 180 :вес 80})))
    
    (ползунок определения [значение параметра min max делает недействительным]
      [: input {: тип "диапазон" : значение значение : мин мин : макс макс
               :стиль {:ширина "100%"}
               : при смене (fn [e]
                            (пусть [новое значение (js/parseInt (.. e -target -value))]
                              (своп! ИМТ-данные
                                     (фн [данные]
                                       (-> данные
                                         (ассоциированное новое значение параметра)
                                         (dissoc делает недействительным)
                                         нач-бми)))))}])
    
    (определить bmi-компонент []
      (let [{:keys [вес рост bmi]} @bmi-data
            [диагностика цвета] (состояние
                              (< ИМТ 18.5) ["оранжевый" "недовес"]
                              (< ИМТ 25) ["наследовать" "нормально"]
                              (< ИМТ 30) ["оранжевый" "избыточный вес"]
                              :else ["красный" "толстый"])]
        [:дел
         [:h4 "Калькулятор ИМТ"]
         [:дел
          "Рост: " (внутренняя высота) "см"
          [слайдер :высота высота 100 220 :bmi]]
         [:дел
          "Вес: " (целый вес) "кг"
          [слайдер: вес вес 30 150: bmi]]
         [:дел
          "ИМТ:" (внутренний ИМТ) " "
          [:span {:style {:color color}} диагностика]
          [slider :bmi bmi 10 50 :weight]]])) 

    Производительность

    React сам по себе очень быстр, как и Reagent.На самом деле Реагент в большинстве случаев будет даже быстрее, чем простой React, благодаря оптимизация стала возможной благодаря ClojureScript.

    Смонтированные компоненты перерисовываются только тогда, когда их параметры изменились. Изменение может исходить из атома без ссылки , аргументов, переданных компоненту, или состояние компонента.

    Все эти проверяются на предмет изменений с идентичными? , который в основном является указателем сравнение, поэтому накладные расходы очень низкие.Карты, переданные в качестве аргументов с компонентами сравниваются одинаково: они считаются равными если все их записи идентичны. Это относится и к встроенным Компоненты React, такие как :div , :p и т. д.

    Все это означает, что вам просто не придется заботиться о производительность большую часть времени. Просто определите свой пользовательский интерфейс, как вам нравится – это будет достаточно быстро.

    Есть несколько ситуаций, о которых вам, возможно, придется позаботиться. о, однако. Если вы дадите Реагенту большую последовательность из компоненты для рендеринга, вам, возможно, придется снабдить их всех уникальный атрибут :key для ускорения рендеринга (см. над).Также обратите внимание, что анонимные функции, как правило, не равны друг другу, даже если они представляют один и тот же код и закрытие.

    Но опять же, в целом вы должны просто доверять тому, что React и Реагент будет достаточно быстрым. Эта самая страница состоит из одного Компонент-реагент с тысячами дочерних компонентов (каждый круглые скобки и т. д. в примерах кода являются отдельным компонентом), и тем не менее, страница может обновляться много раз в секунду без дополнительных затрат браузер малейший.

    Кстати, на этой странице также используется еще один прием React: вся страница предварительно визуализируется с использованием Node и react.dom.server/render-to-string . Когда он загружен в браузере, React автоматически прикрепляет обработчики событий к уже существующее дерево DOM.

    react.core documentation

    (adapt-react-class c)

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

    после рендеринга

    (после рендеринга f)

     Запустите f с использованием requestAnimationFrame или эквивалентного.
    
    f будет вызываться сразу после любого рендера в очереди в следующей анимации
    кадра (и даже если на самом деле рендеринга не происходит). 

    argv

    (argv this)

     Возвращает всю форму Hiccup, переданную компоненту.
     

    как элемент

    (форма как элемент) (компилятор формы как элемент)

     Превращает вектор синтаксиса Hiccup в элемент React.Форма возврата
    не изменится, если это не вектор. 

    атом

    (атом x) (атом x и остальные)

     Аналогично clojure.core/atom, за исключением того, что он отслеживает дерефы.
    Компоненты реагента, которые разыгрывают один из них, автоматически
    перерисовано. 

    дочерние элементы

    (дочерние элементы this)

     Возвращает дочерние элементы, переданные компоненту.
     

    имена классов

    (названия классов) (названия классов класс) (названия классов класс1 класс2) (названия классов класс1 класс2 и другие)

     Функция, которая нормализует значения в строку
    
    Реагент позволяет определять классы как:
    - Струны
    - Именованные объекты (символы или ключевые слова)
    - Коллекции предыдущих типов 

    create-class

    (спецификация create-class) (компилятор спецификации create-class)

     Создает класс JS на основе предоставленной карты Clojure, например:
    
    ```cljs
    {;; Конструктор
     :constructor (fn [этот реквизит])
     :get-initial-state (fn [это])
     ;; Статические методы
     :get-derived-state-from-props (fn [props state] частичное состояние)
     :get-derived-state-from-error (fn [ошибка] частичное состояние)
     ;; Методы
     :get-snapshot-before-update (fn [этот старый-argv новый-argv] снимок)
     :should-component-update (fn [этот старый-argv новый-argv])
     :component-did-mount (fn [это])
     :component-did-update (fn [этот снимок старого состояния old-argv])
     :component-will-unmount (fn [это])
     :component-did-catch (fn [информация об этой ошибке])
     :реагент-рендер (fn [аргументы....])
     ;; Или альтернативно:
     : рендер (fn [это])
     ;; Устаревшие методы:
     :UNSAFE_component-will-receive-props (fn [этот новый-argv])
     :UNSAFE_component-will-update (fn [this new-argv new-state])
     :UNSAFE_component-will-mount (fn [это])}
    ```
    
    Все необязательно, кроме :regent-render или :render.
    
    Ключи карты должны использовать имена методов `React.Component` (https://reactjs.org/docs/react-component.html),
    и может поставляться в змеином или верблюжьем футляре.
    
    Состояние можно инициализировать с помощью конструктора, который соответствует React.Класс компонента,
    или используя getInitialState, который соответствует старой функции React createClass и
    теперь реализовано Reagent для совместимости.
    
    Состояние обычно может быть любым, например. Объект Cljs. Но если использовать getDerivedState
    методы, состояние должно быть простым объектом JS, поскольку реализация React использует
    Object.assign для слияния частичного состояния с текущим состоянием.
    
    Встроенные статические методы или свойства React автоматически определяются как статические. 

    create-compiler

    (create-compiler opts)

     Создает объект Compiler с заданными `opts`,
    это может быть передано в `render`, `as-element` и другие функции для управления
    как они превращают Hiccup в стиле Reagent в компоненты и элементы React.

    create-element

    (create-element type) (create-element type props) (create-element type props child) (create-element type props child & children)

    5 a Create собственный элемент React, напрямую вызывая React.createElement.
    
    Это означает, что второй аргумент должен быть объектом javascript (или nil), и
    что любые формы икоты реагента должны быть обработаны с помощью as-element. Например
    так:
    
    ```cljs
    (r/create-element "div" #js{:className "foo"}
      "Привет" (r/as-элемент [:strong "мир!"])
    ```
    
    что эквивалентно
    
    ```cljs
    [:разд.foo "Привет" [:strong "мир!"]]
    ``` 

    current-component

    (current-component)

     Возвращает текущий компонент React (также известный как this) в компоненте
    функция. 

    курсор

    (путь к источнику курсора)

     Введите курсор в атом реагента.
    
    Ведет себя как атом реагента, но фокусирует обновления и дерефы на
    указанный путь внутри обернутого атома реагента. например.,
    
    ```cljs
    (let [c (курсор ra [:nested :content])]
      ... @c ;; эквивалентно (get-in @ra [:nested :content])
      ...(сброс! c 42) ;; эквивалентно (swap! ra assoc-in [:nested :content] 42)
      ... (своп! c вкл) ;; эквивалентность (swap! ra update-in [:nested :content] inc)
      )
    ```
    
    Первый параметр также может быть функцией, которая должна выглядеть
    что-то вроде этого:
    
    ```cljs
    (определить установить-получить
      ([k] (вход в @state k))
      ([k v] (своп! состояние ассоци-во k v)))
    ```
    
    Функция будет вызываться с одним аргументом – путь, переданный
    курсор – при разыменовывании курсора и два аргумента (путь и
    новое значение) при изменении курсора.Учитывая, что функция «установить-получить» (и это состояние является атомом реагента или
    другой курсор) эти курсоры эквивалентны:
    `(состояние курсора [:foo])` и `(курсор установить-получить [:foo])`.
    
    Обратите внимание, что курсор ленив: его значение не изменится, пока он не будет
    использовал. Это можно заметить с помощью add-watch. 

    утилизировать!

    (распоряжаться! x)

     Остановить результат отслеживания! от обновления.
     

    заподлицо

    (заподлицо)

     Немедленная обработка загрязненных компонентов.
    
    Обратите внимание, что это может не работать в обработчиках событий, поскольку React.js делает
    Пакетирование обновлений там. 

    принудительное обновление

    (принудительное обновление этого) (принудительное обновление этого глубокого уровня)

     Принудительное повторное рендеринг компонента.
    
    Если второй аргумент истинен, дочерние компоненты также будут
    перерендерились, даже пока их аргументы не изменились. 

    merge-props

    (merge-props) (merge-props defaults) (merge-props defaults props) (merge-props defaults props & other)

    9002 , обрабатывая `:class` и `:style`.Значение :class всегда нормализовано (с использованием имен классов), даже если нет слияние выполнено.

    следующий тик

    (следующий тик f)

     Запустить f с использованием requestAnimationFrame или эквивалентного.
    
    f будет вызываться непосредственно перед визуализацией компонентов. 

    partial

    (partial f & args)

     Работает так же, как clojure.core/partial, но результат можно сравнить с =
     

    props

    (props this)

     Возвращает реквизиты, переданные компоненту.

    reactify-component

    (reactify-component c) (reactify-component c компилятор)

     Возвращает адаптер для компонента Reagent, который можно использовать из
    React, например, в JSX. Единственный аргумент, props, передается в
    компонент, преобразованный в карту. 

    реакция

    макрос

    (реакция и тело)

     Создает реакцию из тела, возвращает деифалируемый
    содержащий результат тела. Если тело дереф
    реактивные значения (Атоны реагентов, трек и т.д.), тело
    будет запущен снова, и значение реакции будет обновлено.Новая реакция создается каждый раз, когда вызывается реакция,
    поэтому вызывающему абоненту нужно позаботиться о том, чтобы не создавалась новая реакция
    например визуализация каждого компонента с помощью with-let, form-2 или form-3
    компонентов или других решений. Рассмотрите возможность использования react.core/track,
    для функции, которая кэширует извлекаемое значение и, таким образом, может быть безопасно
    используется, например, в безопасно выполнять рендеринг. 

    реакция

    макрос

    (реакция и тело)

     Создает реакцию из тела, возвращает деифалируемый
    содержащий результат тела.Если тело дереф
    реактивные значения (Атоны реагентов, трек и т.д.), тело
    будет запущен снова, и значение реакции будет обновлено.
    
    Новая реакция создается каждый раз, когда вызывается реакция,
    поэтому вызывающему абоненту нужно позаботиться о том, чтобы не создавалась новая реакция
    например визуализация каждого компонента с помощью with-let, form-2 или form-3
    компонентов или других решений. Рассмотрите возможность использования react.core/track,
    для функции, которая кэширует извлекаемое значение и, таким образом, может быть безопасно
    используется, например, в безопасно выполнять рендеринг. 

    рендеринг

    устарел в 0.10.0

    (рендеринг и _)

    replace-state

    (заменить-state это новое состояние)

     Установить состояние компонента.
    Эквивалентно `(reset! (state-atom this) new-state)` 

    rswap!

    (rswap! a f & args)

     Заменяет значение a на `(apply f current-value-of-atom args)`.
    
    обмен! работает как swap!, за исключением того, что рекурсивные вызовы rswap! на
    разрешены одни и те же атомы, и он всегда возвращает ноль. 

    набор компилятора по умолчанию!

    (установить компилятор по умолчанию! Компилятор)

     Глобально устанавливает объект компилятора, используемый `render`, `as-element` и другими
    вызывается по умолчанию, если параметр компилятора не указан.Используйте значение `nil`, чтобы восстановить исходный компилятор по умолчанию. 

    set-state

    (set-state this new-state)

     Объединить состояние компонента с new-state.
    Эквивалентно `(swap! (state-atom this) merge new-state)` 

    state

    (state this)

     Возвращает состояние компонента, установленное с помощью replace-state или set-state.
    Эквивалентно `(deref (r/state-atom this))` 

    state-atom

    (state-atom this)

     Возвращает атом, содержащий состояние компонентов.

    дорожка

    (дорожка f и аргументы)

     Принимает функцию и необязательные аргументы и возвращает деформируемую
    содержащий вывод этой функции. Если функция разыгрывается
    Атомы реагента (или дорожки и т. д.), значение будет обновляться всякий раз, когда
    меняется атом.
    
    Другими словами, `@(track foo bar)` даст тот же результат.
    как `(foo bar)`, но foo будет вызываться снова только тогда, когда атомы
    зависит от изменений и запускает обновления компонентов только тогда, когда
    его результат меняется.track ленив, т. е. функция вычисляется только при deref. 

    трек!

    (track! f & args)

     Активная версия track. Переданная функция называется
    немедленно и продолжает вызываться при необходимости, пока не будет остановлен
    с утилизацией!. 

    with-let

    макрос

    (with-let привязки и тело)

     Связывание переменных как с let, за исключением того, что используется в компоненте
    привязки оцениваются только один раз. Также принимает опциональный finally
    предложение в конце, которое выполняется, когда компонент
    уничтожен.

    with-let

    макрос

    (with-let привязки и тело)

     Связывание переменных как с let, за исключением того, что они используются в компоненте
    привязки оцениваются только один раз. Также принимает опциональный finally
    предложение в конце, которое выполняется, когда компонент
    уничтожен. 

    wrap

    (перенос значения reset-fn & args)

     Укажите комбинацию значения и обратного вызова, которая выглядит как атом.
    
    Первым аргументом может быть любое значение, которое будет возвращено при
    результат разорван.Вторым аргументом должна быть функция, которая вызывается с параметром
    необязательные дополнительные аргументы, предоставленные для переноса, и новое значение
    получившийся «атом».
    
    Используйте, например, так:
    
    ```cljs
    (обернуть (:foo @state)
          обмен! государственный помощник :foo)
    ```
    
    Вероятно, полезно только для передачи дочерним компонентам. 

    Различие между компонентом Reagent и компонентом React

    Опубликовано: 21 марта 2021 г.

    На работе мне редко приходится думать о различии между компонентом Reagent и компонентом React, поскольку Reagent отлично справляется со своей задачей, обеспечивая согласованное и простой в использовании API.(Кроме того, мы не используем внешние библиотеки компонентов JS.)

    На днях я столкнулся с вопросом StackOverflow. Во время поиска ответа мне пришло в голову, что простота Reagent API иногда может ввести людей в заблуждение. Основное внимание в этой статье уделяется не столько исходному вопросу SO, хотя я буду использовать пример в посте, сколько тому, как поделиться некоторой информацией, которую легко упустить из виду для пользователей Reagent.

    Отличие

    Компоненты

    React — это классы, расширяющие React.Компонент класса. Пример:

    В отличие от компонентов React, компоненты Reagent в наиболее упрощенной форме (также называемые компонентом Form-1) — это просто функции Clojure, которые возвращают данные Clojure в стиле Hiccup.

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

    Хотя это может показаться нелогичным, поскольку я уже называю его «компонентом», вышеприведенный компонент Reagent — это просто чистая функция Clojure, и за ним больше нет скрытой магии .Вы можете «вызвать» его, как и любые другие функции в Clojure, и он вернет разметку Hiccup без каких-либо сюрпризов:

    .

    Возвращаемые данные разметки представляют собой простые данные Clojure, без рендеринга, без реактивности, без магии, просто чистые данные Clojure, постоянные и неизменяемые. Имейте в виду, что в приложении Reagent редко следует «вызывать» компонент Reagent таким образом. Вместо этого вы должны «рендерить» его, явно вызывая функцию Reagent.dom/render для рендеринга компонента «Реагент» верхнего уровня.

    Рендеринг

    Что делает функция react.dom/render :

    1. Компилировать компонент верхнего уровня Reagent (и все вложенные дочерние компоненты) в компоненты React ,
    2. Вызов функции JS ReactDOM.render(...) с скомпилированными компонентами React для рендеринга элементов DOM .

    Или в виде блок-схемы:

      Реагентная компиляция React Render
    Компоненты --------> Компоненты -------> DOM
    (Clojure Fns) (JS-классы)  

    В большинстве случаев вам не нужно об этом думать, потому что все компоненты являются компонентами-реагентами.Таким образом, легко упустить из виду роль Reagent в компиляции функций Clojure в компоненты React. (Это может быть причиной того, что некоторые другие библиотеки предпочитают явные макросы для определения компонента, такие как defc rum или defsc fulcro, чтобы сделать компиляцию явной для пользователя.) Однако, когда дело доходит до взаимодействия с компонентом React библиотек, нам нужно начать более четко думать о том, какие компоненты являются React, а какие Reagent.

    Взаимодействие с React

    На официальном сайте есть отличная статья про Interop with React.Проверьте это, если вы не так знакомы с этим. В моей краткой истории взаимодействия с React я почти исключительно использовал тег :> для рендеринга компонента React из Reagent. Однако все может стать более сложным, как в примере: компоненты высшего порядка «Decorator»

    .

    Попался

    Вопреки моему чутью, r/adapt-react-class не является противоположностью r/reactify-component . То есть компонент React не будет возвращаться к самому себе после прохождения через r/adapt-react-class и r/reactify-component . r/adapt-react-class берет компонент React и возвращает react.impl.template.NativeWrapper , тогда как r/reactify-component берет Clojure callable и принуждает его к компоненту React . Так что будьте в курсе.

    Пример: стилизованный компонент пользовательского интерфейса материала

    Ниже приведен пример, который я разработал для вопроса StackOverflow. Обратите внимание на вызовы r/adapt-react-class и r/reactify-component .Поскольку компонент MuiValueLabel является компонентом React из внешней библиотеки, нам нужно использовать r/adapt-react-class , чтобы мы могли использовать его с другой библиотекой Reagent. Значение props для :ValueLabelComponent должно быть компонентом React, потому что слайдер является адаптированным классом реакции (так же, как mui-value-label ), следовательно, вызов функции r/reactify-component .

    Это упоминается в Gotcha. Настоящая сложная часть заключается в том, что react-material-ui.styles/with-styles возвращает react.impl.template.NativeWrapper , а r/reactify-component не может обрабатывать его так же, как обрабатывает компоненты Reagent. (См. фрагмент ниже.) Поэтому мне нужно было обернуть его внутри другого вызова функции, чтобы заставить его работать.

    В этом случае было чрезвычайно полезно иметь работающий REPL, чтобы помочь мне выяснить типы компонентов.

    Эпилог

    Мне было очень весело проводить время за чтением исходного кода Reagent.Здесь я просто хочу поделиться несколькими интересными функциями, которые я видел:

    react.impl.template NS: - vec-to-elem : преобразовать vec в элемент JS React с помощью make-element - make-element : создать элемент JS React - as-element - действительный тег? : вернуть true, если тег является символом, ключевым словом, строкой, функцией или NativeWrapper.

    react.impl.component NS: - create-class : Создает класс JS (который расширяет React.Component) на основе предоставленной карты Clojure.

    react.impl.util NS: - dash-to-prop-name : преобразовать имена реквизитов kebab-case в camelCase.

    ClojureScript + Reagent Tutorial с примерами кода

    Автор Эрик Норманд. Обновлено: 7 июня 2020 г.

    Это руководство научит вас всему тому, что дает вам Re-frame, что мы используем в Re-frame. Re-frame построен на основе Reagent и использует многие концепции Reagent как есть. Reagent — это тонкая, но мощная оболочка вокруг React.

    В этом руководстве вы узнаете о трех способах создания компонентов, подробностях Hiccup (включая ярлыки), как получить доступ к реальным узлам DOM, как создавать атомы и реагировать на изменения в них, а также как понимать повторный рендеринг.

    Содержание

    Другие сообщения в этой серии Re-frame

    Что такое реагент?

    Reagent — это оболочка ClojureScript для React. Это дает вам возможность легко создавать компоненты React. Reagent имеет три основные функции, которые упрощают его использование: использование функций для создания компонентов React, использование Hiccup для генерации HTML и сохранение состояния в Reagent Atoms.Reagent позволяет вам писать код React, который будет кратким и удобочитаемым.

    Компоненты-реагенты — это функции

    Компонент Form-1

    Когда мы используем React из ClojureScript, мы обычно используя React в функциональном стиле программирования. То есть мы хотите определить функцию из входных данных в дерево DOM. Реагент максимально упрощает это. Просто определите функцию, которая — возвращает Иккинг. Это называется компонентом Form-1 . функция соответствует React render() метод.

      (по умолчанию зеленая кнопка [txt]
      [:button.green текст])
      

    Компонент Form-2

    Следующий случай немного сложнее. Если вам нужно инициализировать что-то при создании компонента, вы используете a Form-2 компонент . Компоненты Form-2 — это функции, которые вернуть их функцию рендеринга. Внешняя функция будет вызывается один раз, чтобы получить функцию рендеринга. Затем рендер функция будет вызываться каждый раз, когда компоненту необходимо оказывать. Если вы завернете эту внутреннюю функцию рендеринга в let , вы можете инициализировать какое-то состояние там.

      (кнопка подсчета по умолчанию [txt]
      (пусть [состояние (реагент/атом 0)]
        (фн [текст]
          [:кнопка.зеленый
            {:on-click #(swap! state inc)}
            (str txt " " @state)])))
      

    Внешняя функция будет вызвана один раз, затем внутренняя функция будет вызываться для каждого рендера. Две функции должны принимать те же аргументы.

    Компонент Form-3

    React имеет полный жизненный цикл для своего компоненты, которые включают в себя методы для инициализации компонент и выполнять эффекты, когда компонент установлен.Есть много методов для всего, что происходит с компонентом от создания до удаления из ДОМ. Вам редко нужен доступ к ним, но когда он вам нужен, Реагент дает вам компонентов Form-3 . Компоненты формы-3 функции, которые возвращают значение, созданное реагент/создать-класс .

      (определение сложного компонента [a b c]
      (пусть [состояние (реагент/атом {})]
        (реагент/создать-класс
          {: компонент сделал монтирование
           (fn [] (println "Я оседлал"))
    
           
    
           
           :display-name "complex-component"
    
           
           :реагент-рендеринг
           (фн [а б в]
             [:div {:класс c}
               [:i а] " " б])))))
      

    :display-name дает компоненту имя, которое реагент будет использоваться при печати отладочных сообщений.полезно дайте ему имя.

    React определяет девять различных методов жизненного цикла. Каждый метод имеет свой комплекс Применение. К счастью, Reagent делает большинство методов ненужный. На самом деле есть только четыре, которые вам когда-либо понадобятся использовать.

    :component-did-mount вызывается сразу после компонента добавляется в DOM. Это первый раз, когда у вас будет доступ к фактическому элементу DOM, связанному с этим компонент. Метод принимает один аргумент: компонент сам.Вызов реагент.ядро/дом-узел на нем, чтобы получить узел DOM. Реализуйте этот метод для настройки Узлы DOM для внешних компонентов, таких как HTML canvas es.

      :монтирование компонента
    (фн [комп.]
      (пусть [узел (реагент/дом-узел комп)
            
            ctx (узел .getContext "2d")]
        (.fillRect ctx 10 10 10 10)))
      

    :regent-render — это метод рендеринга, к которому вы привыкли. Форма-1 и Форма-2. Вам просто нужно дать ему имя в создать функцию класса .Этот метод обязателен.

    :component-did-update вызывается сразу после повторный рендеринг. Это означает, что узлы DOM потенциально просто был воссоздан алгоритмом Virtual DOM. Если ты делая что-то особенное с :component-did-mount , вы можете нужно сделать это снова здесь. Вы также можете сделать некоторые изменения, основанные на изменениях в локальном состоянии.

      :обновление компонента
    (фн [комп.]
      (пусть [узел (реагент/дом-узел комп)
            ctx (узел .getContext "2d")]
        (.fillRect ctx 10 10 10 10)))
      

    :component-will-unmount вызывается непосредственно перед компонент отключен от DOM. У вас еще есть доступ к узлу DOM. Это твой последний шанс очиститься. все, что вам может понадобиться, прежде чем ваш компонент исчезнет навсегда. Редко, когда вы захотите реализовать это метод.

    Подробнее о каждом из них я расскажу здесь.

    См. Создание компонентов реагентов для более подробного объяснения трех форм.

    Примечание. Обычно Reagent преобразует camelCase в (начальный заглавные буквы) в кебаб-регистр (строчные с дефисами), который чаще встречается в Clojure.Если вы посмотрите документацию для методов жизненного цикла React они будут отмечены в верблюжий чехол . Вы можете мысленно перевести их в чехол для кебаба .

    Иккинг генерирует HTML

    В обычном React у вас есть два варианта генерации HTML в ваши методы рендеринга. Первым и наиболее распространенным является использование JSX. JSX — это препроцессор для JavaScript, который читает HTML, встроенный в ваш JavaScript и превращает его в обычный метод React DOM звонки. Второй способ - вызвать эти методы самостоятельно. напрямую, что очень многословно.

    К счастью, Reagent предоставляет третий (и, возможно, лучший) подход. Ваша функция рендеринга может возвращать Икота. Иккинг - это очень распространенный способ выразить HTML внутри Clojure Приложения. Возможно, он вам уже знаком.

    Hiccup представляет элементы HTML как Clojure векторы. Ты укажите тип элемента с ключевым словом. Атрибуты HTML зайти в карту. И содержимое следует внутри вектор. Элементы хорошо стыкуются. А вообще это очень элегантный способ встроить HTML в Clojure.

    Hiccup более лаконичен, чем метод React DOM звонки. Но он также более лаконичен, чем встроенный HTML, поскольку вы опускаете конечный тег.

    Basic HTML

    Основы Hiccup довольно просты. Если у вас есть HTML тег вроде

      

    Это становится

      [:div]
      
    1. Каждый тег HTML становится вектором Clojure. Нет необходимости в закрывающий тег, потому что вектор закрывается ] (закрывающая квадратная скобка).
    2. Имя тега div становится ключевым словом с тем же именем :div .

    HTML вкладывает теги внутрь других тегов, поэтому нам нужен способ сделать это.

      <дел>
       

    Здравствуйте!

    Это мое сообщение.

    Становится:

      [:div
     [:h2 "Привет!"]
     [:p "Это мое сообщение."]]
      
    1. h2 вложен в div . Таким образом, вектор :h2 является элементом вектора :div .Он должен идти после имени тега. Вы можете иметь несколько детей.
    2. Текст представлен в виде строки ClojureScript.

    К счастью, React и Reagent изящно обрабатывают ноль детей. Это позволяет вы делаете несколько удобных шаблонов, например:

      [:div
      (когда заголовок [:h2 заголовок])
      (когда сообщение [:p сообщение])]
      

    , когда вернет nil , если тест ложный. Если оба title и msg отсутствуют, вы получаете эту икоту:

      [:div nil nil]
      

    Reagent проигнорирует nil s и отобразит это:

      

    Хорошо, а как насчет атрибутов? Теги HTML обычно имеют атрибуты, вот так:

      

    Здравствуйте!

    Это мое сообщение

    В Hiccup атрибуты представляют собой хэш-карту, которая идет сразу после название тэга.Это становится:

      [:div {:класс "контейнер"}
     [:h2 {:id "приветствие"}
      "Привет!"]
     [:p "Это мое сообщение"]]
      

    Хэш-карта атрибутов не является обязательной. И обратите внимание, что имена атрибутов кебаб-кейс в Реагенте. Если вы посмотрите через React документации, они находятся в camelCase . Также: класс является зарезервированным ключевое слово в JavaScript, поэтому React ссылается на className атрибут. В Reagent это правильно сокращено до :class .

    У Иккинга есть особые правила для некоторых атрибутов и их значений которые очень удобны при создании компонентов.

    Атрибуты стиля

    В HTML, если вы хотите поместить встроенный стиль в тег, вы делаете это с помощью атрибут. Значение представляет собой строку допустимого CSS.

      <дел>
      

    Некоторый текст

    Вы вставляете туда строку, которая должна быть правильным CSS. Но когда вы генерируете эти атрибуты программно, вы не хотите правильно конкатенировать строки, используя сложную логику.Ты хотите, чтобы это разбилось на что-то более легкое для работы в вашем язык. К счастью, React избавился от атрибута в стиле . В React, вы используете объект JavaScript. Ключи являются свойством CSS имена, а значения — это значения CSS в виде строк. Цифры тоже работают для некоторых свойств. Они становятся числами пикселей. Например, 200 становится 200px в CSS.

    Reagent построен на этом и позволяет вам использовать карту ClojureScript для представлять встроенные стили. Применяются те же правила: имя CSS свойство является ключом, а значение свойства CSS является стоимость.Вот как будет выглядеть приведенный выше div со встроенными стилями:

      [:div {:style {:margin-left 10
                   :ширина "15%"}}
     [:p "Некоторый текст"]]
      

    Обратите внимание, что мы используем число 10 , потому что это 10px . Но мы должны используйте строку "15%" , потому что единицы измерения не являются пикселями. Кроме того, обратите внимание что мы можем использовать правильное имя CSS, margin-left , которое недопустимо. JavaScript из-за - .Реагент справится с этим за нас!

    React также дает нам несколько дополнительных ярлыков, которые действительно помогают, когда создание этих структур данных.

    ноль и ложь значения атрибута

    Если значение атрибута (любого атрибута, включая стили) nil или false атрибут не включается в тег. Это очень полезно, когда вы строите что-то условно. Вот пример:

      (определенное сообщение [txt срочно?]
      [:div {:style {:color (когда срочно? "красный")}}
        текст])
      

    Когда срочно? равно true , мы хотим, чтобы текст сообщения был красным.Но когда это не правда , мы вообще не хотим менять цвет. Этот код будет делать именно это, потому что выражение , когда будет nil , когда срочно? это ложь .

    Некоторые атрибуты HTML не принимают значения. Они просто должны быть там или нет. Например, если вы хотите флажок для проверки, вы делаете:

      
      

    Атрибуту проверено не требуется значение.Но в нашем представление, мы используем карту. Поэтому каждому ключу нужно значение! Реагент и React умны. Вы можете использовать true и false в качестве значений. если ты хотите, чтобы флажок был установлен, присвойте атрибуту checked значение true , иначе false . Не нужно беспокоиться о том, есть он или нет.

      (определить флажок [имя проверено?]
      [: ввод {: тип: флажок
               :checked (логическое значение проверено?)
               :имя имя}])
      

    Другие значения

    Значения ClojureScript для атрибутов имеют собственную семантику.Вот как они работают:

    • Логические значения: false означает игнорировать атрибут, true означает показать его без значения.
    • Строки: передаются как есть
    • Числа: если они являются значениями стилей, они имеют размер px ; иначе, превращены в строки
    • Ключевые слова и символы: передаются их имена (строки); :a/b получает превратился в "b"
    • Карты: превратились в объекты JavaScript и переданы в React.
    • Другие коллекции: преобразованы в эквивалентные значения JS и переданы.
    • Функции: передается
    • nil : игнорирует атрибут

    класс шаблон

    Многие теги HTML имеют несколько классов. Некоторые из этих классов постоянными, то есть они не меняются. Но некоторые из них будут изменять. Например, вы можете выделить активный элемент в представление списка. Таким образом, вы добавляете класс active , который дает синий светиться. Но затем, как только он перестает быть активным, вы удаляете этот класс. Этот может запутаться, поскольку вы часто объединяете строки вручную.

    Мое решение состоит в том, чтобы написать небольшую вспомогательную функцию, которая будет конкатенировать их для меня. Это позволяет мне писать встроенную логику. Я называю это cs , потому что это коротко. Это означает классов .

      (определение cs [и имена]
      (str/join " " (фильтровать идентификационные имена)))
      

    Фильтр избавляется от нулевых и ложных имен. Затем я присоединяюсь к ним с промежутком между ними. Я использую это так:

      (элемент defn [txt активен? скрыт?]
     [:div {:класс (cs "элемент"
                       (когда активно? "активно")
                       (когда скрыто? "скрыто"))}
      текст])
      

    Идеально? Я так не думаю.Но это работает 🙂 Я хотел бы услышать, что вы делать.

    id и класс ярлык

    Реагент также имеет ярлыки для атрибутов id и класса . Эти может быть полезным. Вот как это работает.

    Вместо установки атрибута :id можно просто поставить # символ после имени тега. Он должен выглядеть как селектор CSS синтаксис.

      [:div#основное содержание
     ....]
      

    Это создает HTML следующим образом:

      
    ...

    Если у вас нет других атрибутов, это намного короче и проще. читать.

    Вы можете сделать что-то подобное с атрибутом :class . Этот раз, используйте . как в CSS:

      [:button.btn.btn-primary ...]
      

    Обратите внимание, что это создает два класса:

      
      

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

    И ярлык класса делает работающим с атрибутом class! Рассмотреть возможность помещая постоянных классов в ярлык и временный классы в атрибуте.

    Ярлык вложенного тега

    Реагент Иккинг делает то, что я не очень часто использую, это позволяют глубоко вкладывать теги с помощью одного вектора. Вы используете что-то совсем как селектор CSS для непосредственно вложенных тегов. Кажется, это может быть очень полезным для некоторых из тех фреймворков CSS, которым нравится заверните все в div с классами:

      [:div.оболочка> div.inner
      "Привет!"]
      

    Создает эту структуру:

      
    Здравствуйте!

    Здорово, когда это все, что вам нужно. Но обратите внимание, что вы не можете установить атрибуты на внешних элементах, только на внутренних.

    События React DOM

    React определяет свои собственные события, которые оборачивают обычные события DOM предоставляемые браузерами. Все браузеры разные, так что это действительно хорош для кроссплатформенного кодирования.Более того, события React более например, как вы ожидаете, что все будет работать. Например, onchange Событие HTML при вводе текста срабатывает, когда элемент теряет фокус, а не когда вы печатаете в нем. React решает эту проблему и многое другое.

    В React вы устанавливаете обработчики событий с атрибутами. Ценности должны быть функции. Функции принимают один аргумент, т. вся информация о мероприятии. Я обычно называю это e , потому что это коротко.

    Все объекты событий React имеют некоторые общие свойства и некоторые специфические для них свойства. Документы React — лучший источник информации обо всех возможных событиях. Это полное и до настоящего времени. Только помните, что Реагент будет использовать кебаб-кейс , в то время как Документы React используют camelCase .

    В качестве примера, вот как мы можем реагировать на событие :on-click кнопки:

      [:button.btn.btn-primary
      {:по клику (fn [e] (js/console.log "Привет!!"))}
      "Нажми на меня!"]
      

    Теперь несколько слов об обработчиках по умолчанию и распространении событий.HTML модель событий все еще действует. Это просто HTML-события с небольшой объект-обертка вокруг них.

    Вы должны быть знакомы с моделью распространения событий ДОМ. По сути, когда событие запускается на узле DOM, обработчик этого узел называется. Затем обработчик вызывается у его родителя. Затем на его parent, вплоть до вершины дерева DOM. Вы можете остановить это поведения в любом обработчике, вызвав (.stopPropagation e) (см. остановить распространение ).

    Кроме того, многие элементы имеют поведение по умолчанию. Например, отправить Кнопка отправит форму, в которой она находится, при нажатии. Ты сможешь предотвратить поведение по умолчанию, вызвав (.preventDefault e) внутри обработчик. См. preventDefault .

    Подкомпоненты

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

     
    [:div#логин-форма
      [:form {:method:post:action "/login"}
        [поле имени пользователя]
        [поле пароля a b c]
        [:button {:type :submit} "Войти"]]]
      

    Обратите внимание, как легко закрыть эти вещи. Больше никаких проблем с сопоставлением теги.

    Встраивание компонентов React из JavaScript

    Есть еще один трюк, который вы можете проделать с Reagent Hiccup. Иногда вы есть компонент React, допустим, он написан на JavaScript, и вы хочу встроить его в Hiccup.Там немного перевода Реагент придется делать. Тем не менее, Реагент делает это легко. Используйте :> вместо имени HTML-тега или компонента Reagent.

      [:> js/nativeJSComponent {:title "Привет" :otherProp "Мир"}]
      

    После директивы :> вы помещаете компонент React так, как он назван в JavaScript. Затем вы следуете за ним с компонентом React реквизит . Обратите внимание, что карта Clojure преобразуется в правильную Объект JavaScript, но camelCase должен быть сохранен.

    Когда у вас есть строка HTML

    Допустим, вы создаете компонент для отображения сообщения в блоге. Содержимое сообщения в блоге — это строка, содержащая HTML. Итак, вы хотите, чтобы этот HTML визуализировать внутри компонента. Вы можете подумать сделать что-то вроде это:

      (запись в блоге [html]
      [:div.blog-сообщение
        html])
      

    Но это не сработает. Если вы просто вставите строку прямо в компонент, все теги HTML будут экранированы. Вы увидите код.

    React предоставляет способ установить содержимое HTML любого элемента с помощью нить.Вот как это выглядит:

      (defn blog-post [html]
      [:div.blog-post {:dangerouslySetInnerHTML {:__html html}}])
      

    Это безумие. Это затянуто. Это многословно и больно печатать. А также это специально. Они не хочу, чтобы вы сделали это случайно. Видите ли, React создан для того, чтобы DOM проще в использовании. И одна из вещей, которые усложняют DOM это межсайтовые скриптовые атаки. Если вы отображаете комментарии из блога читателей, и этот контент не подвергается санитарной обработке, вы можете отобразить HTML-код с тегом