Компонент-реактив
Уважаемые партнеры сообщаем Вам, что ООО «Компонент-Реактив»:
- работает на химическом рынке более 30 лет;
- в 2018г провел модернизацию своих производственных мощностей, внедрив ряд новых технологических новшеств;
- увеличил объемы производства, что позволило снизить цены на ряд ключевых продуктов
- в этом и последующие годы предусмотрено освоение новых продуктов — следите за нашим сайтом!
Снижены цены на ряд Неорганических реактивов с 06.02.2020г:
Аскорбиновая кислота, Винная кислота, Лимонная кислота, Молочная кислота, Сульфосалициловая кислота, Фумаровая кислота, Щавелевая кислота, Янтарная кислота, Калий-натрий виннокислый, Натрий уксуснокислый, Натрий щавелевокислый, Тиомочевина, Цинк щавелевокислый, Азотная кислота, Пирофосфорная кислота, Полифосфорная кислота, Сульфаминовая кислота, Алюминий фосфорнокислый, Алюминий хлористый, Аммоний хлористый, Железо хлорид, Калий азотнокислый, Калий-алюминий сульфат, Калий марганцовокислый, Калий сернокислый, Калий фосфорнокислый, Калий хлористый, Кальций азотнокислый, Кальций фосфорнокислый, Литий сернокислый, Литий хлористый безводный, Магний хлористый, Натрий сернистокислый, Натрий сернокислый, Натрий тетраборнокислый, Натрий фосфорнокислый, Натрий хлористый, Никель сернокислый, Цинк сернокислый.
Снижены цены на ряд Органических растворителей:
Ацетон, Бутанол-н, Бутилацентат, Гексан, Гептан, Глицерин, Диметилацетамид, Диметилформамид, Диоксан, Дихлорэтан, Диэтиленгликоль, Изоамиловый спирт, Изобутиловый спирт, Изооктан, Изопропиловый спирт, Ксилол, Метилен хлористый, Метилизобутилкетон, Метилпирролидон, Метилтретбутиловый эфир, Метилэтилкетон, Монометиланилин, Моноэтаноламин, Перхлорэтилен, Пропилацетат-н, Пропиленгликоль, Толуол, Трихлорэтилен, Триэтиламин, Хлороформ, Циклогексанон, Этилацетат.
|
отзывы клиентов и покупателей о компании
А
Абакан
Абу-Даби
Агидель
Агрыз
Адлер
Айхал
Аксай
Актобе
Алапаевск
Алейск
Александров
Алексеевка (Белгородская область)
Алексин
Алматы
Алушта
Альметьевск
Амстердам
Анапа
Ангарск
Анкара
Апатиты
Арамиль
Аргун
Армавир
Арсеньев
Артём
Архангельск
Асбест
Асино
Астрахань
Атырау
Ачинск
Б
Баку
Балаково
Балашиха
Барнаул
Батайск
Бежецк
Белгород
Белово
Белогорск
Белорецк
Белореченск
Белоярский
Березники
Берёзовский
Берлин
Бийск
Биробиджан
Бишкек
Благовещенск
Благодарный
Бобруйск
Боготол
Бодайбо
Бокситогорск
Бологое
Болхов
Большой Камень
Боровск
Братск
Брянск
Бугульма
Буденновск
Бузулук
Бухара
В
Валуйки
Варшава
Великие Луки
Великий Новгород
Верхний Тагил
Верхний Уфалей
Верхняя Пышма
Видное
Вильнюс
Винница
Витебск
Владивосток
Владикавказ
Владимир
Волгоград
Волгодонск
Волжск
Волжский
Вологда
Володарск
Волхов
Вольск
Воркута
Воронеж
Воскресенск
Воткинск
Всеволожск
Выборг
Выкса
Вытегра
Вышний Волочек
Вязники
Вязьма
Вятские Поляны
Г
Гагарин
Гатчина
Геленджик
Георгиевск
Глазов
Гомель
Горно-Алтайск
Гороховец
Горячий Ключ
Грайворон
Гродно
Грозный
Грязи
Губкин
Губкинский
Гулькевичи
Гусев
Д
Дедовск
Десногорск
Дзержинск
Димитровград
Дмитров
Днепр (Днепропетровск)
Долгопрудный
Домодедово
Донецк
Дрезна
Дубна
Душанбе
Дюртюли
Е
Евпатория
Егорьевск
Ейск
Екатеринбург
Елабуга
Елец
Еманжелинск
Ереван
Ессентуки
Ж
Жезказган
Железногорск
Железнодорожный
Жигулевск
Житомир
Жуковский
З
Забайкальск
Заволжье
Заозерск
Запорожье
Зарайск
Звенигород
Зеленоград
Зеленодольск
Зеленокумск
Зима
Златоуст
Знаменск
И
Иваново
Ивантеевка
Ижевск
Избербаш
Иланский
Инта
Иркутск
Исилькуль
Истра
Ишим
Ишимбай
Й
Йошкар-Ола
К
Казань
Калининград
Калтан
Калуга
Каменск-Уральский
Каменск-Шахтинский
Каменское
Камышин
Канаш
Канск
Караганда
Карпинск
Карши
Касимов
Качканар
Кашира
Кемерово
Керчь
Киев
Кимовск
Кимры
Кингисепп
Кинешма
Кириши
Киров
Киров (Калужская область)
Кировград
Кисловодск
Кишинев
Климовск
Клин
Клинцы
Ковров
Ковылкино
Когалым
Коломна
Колпино
Комсомольск-на-Амуре
Конаково
Кондопога
Копейск
Коркино
Королёв
Корсаков
Костомукша
Кострома
Котлас
Краков
Краматорск
Красногорск
Краснодар
Красноперекопск
Краснотурьинск
Красноуральск
Красноуфимск
Красноярск
Кривой Рог
Кропивницкий
Кропоткин
Крымск
Кстово
Кубинка
Кузнецк
Кумертау
Курган
Курск
Кущевская
Кызыл
Кыштым
Л
Лабинск
Лангепас
Лениногорск
Ленск
Лермонтов
Лесной
Ливны
Ликино-Дулёво
Липецк
Лобня
Лондон
Луга
Луховицы
Лыткарино
Люберцы
М
Магадан
Магнитогорск
Мадрид
Майкоп
Малаховка
Малоярославец
Мантурово
Мариуполь
Маркс
Маркс
Махачкала
Мегион
Межвежьегорск
Междуреченск
Миасс
Минеральные Воды
Минск
Минусинск
Мирный
Михайлов
Михайловка
Михайловск
Мичуринск
Могилёв
Мончегорск
Москва
Московская Область
Муравленко
Мурманск
Муром
Мытищи
Мюнхен
Н
Набережные Челны
Навашино
Надым
Назарово
Назрань
Нальчик
Наро-Фоминск
Нахабино
Находка
Невинномысск
Нерюнгри
Нефтекамск
Нефтеюганск
Нижневартовск
Нижнекамск
Нижнеудинск
Нижний Новгород
Нижний Тагил
Нижняя Тура
Николаев
Нововоронеж
Новокузнецк
Новомосковск
Новороссийск
Новосибирск
Новотроицк
Новоуральск
Новочебоксарск
Новочеркасск
Новый Уренгой
Ногинск
Норильск
Ноябрьск
Нукус
Нур-Султан
Нюрнберг
Нягань
Нязепетровск
О
Обнинск
Обухово
Одесса
Одинцово
Озерск
Октябрьский
Оленегорск
Омск
Онега
Опочка
Орел
Оренбург
Орехово-Зуево
Орск
Осло
Осташков
Оха
П
Павлово
Павловск
Павловский Посад
Павлодар
Папенбург
Певек
Пенза
Первоуральск
Переславль-Залесский
Пермь
Петрозаводск
Петропавловск
Петропавловск-Камчатский
Печора
Питкяранта
Плавск
Пласт
Подольск
Подпорожье
Покров
Полевской
Полысаево
Полярный
Поронайск
Посёлок Афипский
Посёлок Ахтырский
Поселок Белоозёрский
Поселок Любучаны
Поселок Таксимо
Прага
Прокопьевск
Протвино
Прохладный
Псков
Пугачев
Пушкин
Пушкино
Пущино
Пыть-Ях
Пятигорск
Р
Радужный
Райчихинск
Раменское
Рассказово
Ревда
Реутов
Речица
Ржев
Родники
Рославль
Россошь
Ростов-на-Дону
Рубцовск
Рыбинск
Ряжск
Рязань
С
Саки
Салават
Салехард
Сальск
Самара
Санкт-Петербург
Саранск
Сарапул
Саратов
Саров
Саяногорск
Севастополь
Северобайкальск
Северодвинск
Северск
Сегежа
Село Дубовское (Ростовская область)
Село Кожевниково (Томская область)
Село Сабетта
Сергиев Посад
Серебряные Пруды
Серов
Серпухов
Сибай
Симферополь
Скопин
Славгород
Славянск-на-Кубани
Сланцы
Смоленск
Сморгонь
Снежинск
Советск
Советская Гавань
Соликамск
Солнечногорск
Сорочинск
Сосновый Бор
Сочи
Ставрополь
Станица Динская
Станица Ильская
Станица Ленинградская
Станица Отрадная
Станица Северская
Станица Холмская
Старая Русса
Старый Оскол
Стерлитамак
Стрежевой
Струнино
Ступино
Судак
Суджа
Судогда
Суздаль
Сургут
Сызрань
Сыктывкар
Т
Таганрог
Талдом
Тамбов
Ташкент
Таштагол
Тбилиси
Тверь
Темрюк
Тимашевск
Тихвин
Тихорецк
Тобольск
Тольятти
Томилино
Томск
Топки
Троицк
Туапсе
Туймазы
Тула
Туринск
Тучково
Тында
Тюмень
У
Удомля
Улан-Удэ
Ульяновск
Урюпинск
Усинск
Уссурийск
Усть- Илимск
Усть-Илимск
Усть-Лабинск
Уфа
Ухта
Ф
Феодосия
Фрязино
Фурманов
Х
Хабаровск
Ханты-Мансийск
Харьков
Хасавюрт
Херсон
Химки
Ц
Цюрих
Ч
Чайковский
Чайковский
Чапаевск
Чебоксары
Челябинск
Черемхово
Черепаново
Череповец
Черкесск
Черняховск
Чехов
Чикаго
Чистополь
Чита
Чкаловск
Ш
Шадринск
Шарыпово
Шатура
Шахты
Шелехов
Шимановск
Шимкент
Шлиссельбург
Шумерля
Шуя
Щ
Щёкино
Щелково
Щербинка
Щецин
Э
Эдинбург
Электросталь
Элиста
Энгельс
Ю
Югра
Южно-Сахалинск
Южноуральск
Юрьевец
Я
Якутск
Ялта
Ялуторовск
Янаул
Ярославль
Ясногорск
Яхрома
Основной | |
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)
следующий тик
(следующий тик 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
:
- Компилировать компонент верхнего уровня Reagent (и все вложенные дочерние компоненты) в компоненты React ,
- Вызов функции 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]
- Каждый тег HTML становится вектором Clojure. Нет необходимости в закрывающий тег, потому что вектор закрывается
]
(закрывающая квадратная скобка). - Имя тега
div
становится ключевым словом с тем же именем:div
.
HTML вкладывает теги внутрь других тегов, поэтому нам нужен способ сделать это.
<дел>
Здравствуйте!
Это мое сообщение.