Меню Закрыть

Что такое редуктор: Что такое редуктор — ЕМ Интех

Содержание

Редукторы | SEW-EURODRIVE

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

Что такое редуктор?

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

Как работает редуктор?

В зависимости от конструкции, типоразмера и числа ступеней редуктор понижает или повышает частоту вращения двигателя. Получаемое при этом передаточное число i (отношение частоты вращения входного и выходного валов) является одним из важных параметров редуктора. Насколько мощным является редуктор и какие нагрузки он может перемещать, зависит от максимального вращающего момента, измеряемого в ньютон-метрах [Нм].

Какие типы редукторов существуют?

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

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

Особую форму представляют собой планетарные редукторы

. В них передача усилия осуществляется соосно. При этом частота вращения и вращающий момент входного вала – центральной солнечной шестерни – через три или более сателлита передаются на наружную коронную шестерню (сторона выхода) и преобразуются. Особенность: Входной и выходной валы вращаются в одном направлении. В комбинации с серводвигателем планетарные мотор-редукторы для сервопривода обеспечивают очень высокую динамику и точность.

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

и, эксклюзивно от SEW-EURODRIVE, угловой редуктор SPIROPLAN®.

Наше предложение: Для любого применения подходящий редуктор из модульной системы

С ассортиментом из всех стандартных типов редукторов и множеством типоразмеров компания SEW-EURODRIVE дает вам доступ к обширной модульной системе редукторов. В сочетании с нашей модульной системой двигателей и дополнительными компонентами получаются миллионы возможных комбинаций. То есть почти для всех возможных случаев применения вы найдете идеально соответствующий вашим требованиям мотор-редуктор – и совсем не важно, какой редуктор вы выбираете: один из наших стандартных, для сервопривода, из нержавеющей стали или взрывозащищенный.

Стандартные редукторы

Стандартные редукторы

Вам нужны прочные и надежные редукторы своего производства и логистики? Тогда наши стандартные редукторы будут верным решением. Выбирайте между разными типами редуктора с множеством типоразмеров и максимальным вращающим моментом до 50 000 Нм. На выбор предлагаются:

Редукторы для сервопривода

Ваша приводная система должна обладать мощной динамикой и высокой точностью? Тогда лучшим выбором будут наши редукторы для сервопривода: И в этом случае с помощью нашей модульной системы вы сможете комбинировать редукторы и двигатели SEW, чтобы получить идеально подходящую вам конфигурацию мотор-редуктора для сервопривода. Наше предложение:

Редукторы из нержавеющей стали

Редукторы из нержавеющей стали

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

.

Взрывозащищенные редукторы

Если установки и машины согласно производственным условиям работают в среде с воздушно-газовыми или воздушно-пылевыми смесями, в любой стране существующая угроза взрыва требует строжайшего соблюдения правил взрывобезопасности. Они, конечно, распространяются и на соответствующую приводную технику. По этой причине большинство наших стандартных и сервоприводных редукторов мы предлагаем и во взрывозащищенном исполнении – в соответствии с основными нормативами и стандартами для мирового рынка, от ATEX и IECEx до HazLoc-NA®.

Редукторы, мотор-редукторы: ООО «Приводные технологии»

о компании

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

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

новое на сайте
Соосный цилиндрический редуктор MR873, NR873

Номинальная мощность — 15 кВт

Выходные обороты: 10 об/мин … 30 об/мин

Соосно-цилиндрический мотор-редуктор MR873-160L/4 (лапы), NR873-160L/4 (фланец), MR873-180L/6 (лапы), NR873-180L/6 (фланец) — зубчатая трансмиссия, для получения выходных оборотов от 9,0 об/мин до 31 об/мин (рабочую скорость привода следует выбирать …

Соосный цилиндрический редуктор MR773, NR773

Номинальная мощность — 15 кВт

Выходные обороты: 20 об/мин … 45 об/мин

Соосно-цилиндрический мотор-редуктор MR773-160L/4 с исполнением на лапах и модель NR773-160L/4 с фланцевым исполнением — серийный мотор редуктор, выпускаемый с электродвигателем — 15KW . Рационально использовать редукторный механизм с передаточными …

Соосный цилиндрический редуктор MR672, MR673, NR672 и NR673

Номинальная мощность — 15 кВт

Выходные обороты: 30 об/мин … 300 об/мин

Соосный цилиндрический мотор-редуктор MR672-160L/4 (лапы), NR672-160L/4 (фланец) , MR673-160L/4 (лапы), NR673-160L/4 (фланец) — надежная, экономичная и прочная зубчатая трансмиссия, которая служит для передачи крутящего усилия на приводимые …

Бесщеточный DC электродвигатель и мотор редуктор 15W

Номинальная мощность – 15Вт

Бесщеточный электродвигатель постоянного тока G2BLD15W (или электродвигатель G2BLD15W в сборе с редуктором 2 GN_K -C8) представляет собой компактным привод на базе 15-ти Ваттного мотора с входным напряжением 12В с редукторной частью или без нее для …

Что такое редуктор и мотор-редуктор

Мотор редуктор – это механизм, в котором совмещены мотор и редуктор. В качестве привода обычно используются электродвигатели – асинхронные переменного тока или синхронные постоянного. Основным его достоинством являются компактность, простота монтажа и обслуживания. Такие устройства распространены повсеместно, они встречаются в конструкциях самого различного назначения. Многие из нас сталкиваются с ними ежедневно, даже не замечая их. Они используются, например, для приведения в действие стеклоочистителей – дворников – автомобиля.

Задачи, решаемые мотор-редукторами

Эти агрегаты используются с тремя целями:

  1. Изменение величины вращающего момента.

  2. Изменение положения оси вращения.

  3. Регулирование частоты вращения.

  4. Изменение типа движения.

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

Бывает и так, что стандартных для асинхронной электрической машины 3 тыс. оборотов минуту мало. Например, в борфрезах, применяемых стоматологами, скорость вращения рабочей насадки выше двухсот тысяч оборотов в минуту. Изменением частоты питающего напряжения такого результата не достичь.

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

Регулирование частоты вращения производится путем подключения к ведущей шестерне разных по числу зубьев ведомых. Положение оси изменяется за счет геометрии зубчатых колес.

Изменение типа движения заключается в переходе с вращения на поступательное перемещение. Реализуется сопряжением выходного вала редуктора с кривошипно-шатунным механизмом или применением зубчатых реек.

Какими бывают мотор-редукторы

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

Они бывают:

— Цилиндрическими.

— Коническими.

— Червячными.

— Реечными.

— Планетарными.

— Волновыми.

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

Цилиндрические

Агрегаты, в которых электродвигатель вращает редуктор с цилиндрическими шестернями. Само по себе это название является парадоксальным, поскольку настоящая форма – диск. Однако такова традиция. Наиболее простой и часто применяемый вид редуктора, обладающий самым высоким КПД.


Рис. 2. Цилиндрический мотор-редуктор с косозубыми шестернями

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

Конические редукторы

Мотор редукторы, в которых работают конические шестерни. По своей сути они мало отличаются от цилиндрических, бывают и прямые, и косозубые. Их использование позволяет повернуть ведомый вал на 900 относительно ведущего.


Рис. 3. Угловой мотор-редуктор с коническими шестернями

Червячные редукторы

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


Рис. 4. Червячный мотор-редуктор

Недостатком таких редукторов является тихоходность и большая площадь соприкосновения шестерен, из-за чего они склонные к заклиниванию.

Реечные редукторы

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


Рис. 5. Реечный мотор-редуктор

Планетарные редукторы

Такой вид мотор-редукторов, расположение шестерен, в которых похоже на положение планет в звездной системе. Они состоят из четырех основных элементов:

  1. Периферийного зубчатого колеса, называемого короной.

  2. Центрального зубчатого колеса – солнца.

  3. Промежуточных шестеренок, так называемых эпициклов или сателлитов.

  4. Водила, объединяющего сателлиты в один блок.


Рис.6. Планетарный мотор-редуктор с пятью сателлитами

В таком редукторе один из элементов – водило, корона или солнце должен быть жестко закреплен. Это определяет направление вращения и величину передаточного числа. Достоинством этих механизмов является легкость управления скоростью и направлением вращения выходного вала. А также высокий КПД.

Волновые редукторы

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


Рис. 7. Волновой мотор-редуктор с двойным эксцентриком

Мотор-редукторы

Остались вопросы?
Специалисты ЭНЕРГОПУСК ответят на Ваши вопросы:
8-800-700-11-54 (8-18, Пн-Вт)

редуктор — это… Что такое редуктор?

  • редуктор — редуктор: Понижающая зубчатая передача. Источник: ГОСТ Р 51759 2001: Передачи гидродинамические для подвижного состава железнодорожного транспорта. Общие технические условия …   Словарь-справочник терминов нормативно-технической документации

  • РЕДУКТОР — (ново лат., от лат. reducere опять приводить). Хирургический снаряд для вправления вывихов и установки костей сломанных членов. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. РЕДУКТОР новолатинск., от лат.… …   Словарь иностранных слов русского языка

  • Редуктор — (от лат. reductor  отводящий назад, приводящий обратно)  преобразующее устройство. Многозначный термин: Механический редуктор  механизм, преобразующий и передающий крутящий момент; Газовый редуктор  устройство для… …   Википедия

  • РЕДУКТОР — (Reductor) механизм, передающий вращение вала двигателя к валу исполнительного механизма с изменением числа оборотов вала. Вращение в большинстве случаев передается системой зубчатых передач (конических или цилиндрических) или системой зубчатых и …   Морской словарь

  • редуктор — преобразователь, редукционная передача, регулятор, понизитель Словарь русских синонимов. редуктор сущ., кол во синонимов: 9 • вентиль (9) • …   Словарь синонимов

  • Редуктор — англ. gearing метод использования заемного капитала для увеличения прибыли. Степень редукции показывает разницу между обязательствами компании перед владельцами обыкновенных и привилегированных акций. Словарь бизнес терминов. Академик.ру. 2001 …   Словарь бизнес-терминов

  • РЕДУКТОР — (от латинского reductor отводящий назад, приводящий обратно), 1) зубчатая (в том числе червячная) или гидравлическая передача, предназначенная для уменьшения угловых скоростей и соответствующего увеличения вращающих моментов. Используется в… …   Современная энциклопедия

  • РЕДУКТОР — (от лат. reductor отводящий назад приводящий обратно),1) зубчатая (в т. ч. червячная) или гидравлическая передача, предназначенная для изменения угловых скоростей и вращающих моментов.2) Прибор для снижения и поддержания постоянным давления… …   Большой Энциклопедический словарь

  • РЕДУКТОР — РЕДУКТОР, редуктора, муж. (лат. reductor отводчик). 1. Вещество, способное освобождаться от кислорода (хим.). 2. Прибор для уменьшения хода чего нибудь (тех.). Толковый словарь Ушакова. Д.Н. Ушаков. 1935 1940 …   Толковый словарь Ушакова

  • РЕДУКТОР — механизм, служащий для передачи движения с уменьшенной скоростью вращения. Р. представляет собой зубчатые (цилиндрические, червячные или комбинированные) передачи между двумя валами с большим передаточным числом. Обычно заключается в кожух,… …   Технический железнодорожный словарь

  • редуктор — – устройство, состоящее из шестерен, обеспечивает изменение частоты вращения, и (или) смещение оси вращения, и (или) направления и плоскости вращения. EdwART. Словарь автомобильного жаргона, 2009 …   Автомобильный словарь

  • Справочная информация. Что такое редукторы и где они применяются: Статьи

    Срок службы редукторов общепромышленного исполнения

    КПД, соотношение мощности и передаточного отношения

    Редукторы для промышленного оборудования

    Типовые сферы применения различных типов редукторов

    Червячный редуктор как основной элемент привода

    Цилиндрический редуктор — основной тип привода для промышленного оборудования

    Смазка и охлаждение редукторов

    Обслуживание и ремонт редукторов

    Способы монтажа редукторов

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

    Промышленный редуктор — это устройство, состоящее из зубчатых колёс, которое преобразует и передает механическую энергию от двигателя к нагрузке. Предназначен он для изменения соотношения скорости вращения и крутящего момента между источником энергии вращения и исполнительным устройством. Промышленные редукторы должны быть надежными и в то же время компактными. Надежность и безопасность – их основной критерий. Редукторы имеют широкий спектр применения в различных сферах промышленности и сельского хозяйства. Для этого они адаптируют скорость двигателя к необходимым значениям. Адаптация скорости — это то, что обеспечивает правильное функционирование машин.

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

    Основные сферы применения редукторов:

    • металлообработка и машиностроение;
    • электроэнергетика;
    • лесная, деревообрабатывающая и целлюлозно-бумажная промышленность;
    • цветная и чёрная металлургия;
    • химическая и нефтехимическая промышленность;
    • производство строительных материалов;
    • топливная промышленность.

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

    Шестерни

    Шестерни используются со времен Архимеда и Аристотеля, и они продолжают играть важную роль в механических системах по всему миру. Несмотря на то, что основные принципы остаются неизменными, технология значительно продвинулась вперед.

    Шестерни представляют собой наборы колес, которые имеют выступающие элементы, называемые «зубьями», которые подходят друг к другу, так что одни колеса (ведущие колеса) тянут за собой другие (ведомые или ведомые).
    Условием для «сцепления» колес, то есть возможности правильного соединения и передачи движения, является то, что они имеют одинаковые параметры или размеры зубьев.
    Зубчатое колесо передает движение следующему колесу, которое движется в направлении, противоположном исходному.
    Это очень прочные системы, которые позволяют передавать большие мощности между проксимальными, параллельными, перпендикулярными или наклонными осями, в зависимости от их конструкции.

    Одноступенчатый зубчатый механизм

    Двухступенчатый зубчатый механизм

    Зубчатая передача — это механические элементы для передачи вращения, состоящие из двух зубчатых колес, одно ведущее, а другое ведомое.

    Достоинства, недостатки зубчатых пар

    Эти механизмы имеют множество преимуществ перед ремённой и цепной передачей, однако есть и некоторые недостатки.

    Преимущества

    • Занимают мало места
    • Не имеют скольжения
    • Могут передавать большую мощность
    • Не требуют особого обслуживания

    Недостатки

    • Они дороже и сложнее в производстве
    • Они издают много шума в процессе вращения
    В зубчатых колесах необходимо различать следующие части, которые определяют саму шестерню и зуб:
    • Зубья шестерни. Именно они создают толкающее усилие и передают мощность от ведущей оси на ведомую. У них есть характерный профиль, который учитывается при их проектировании и изготовлении.
    • Внешняя окружность. Этот параметр ограничивает внешнюю часть шестерни.
    • Внутренняя окружность. Этот параметр ограничивает внутреннею часть шестерни.
    • Рабочая окружность. Это окружность, по которой сцепляются зубы.

    Изображение смещения точки зацепления прямозубой шестерни

    Радиусы рабочей (Rp), внешней (Re) и внутренней (Ri) окружностей.

    Типы шестерен

    Прямозубые шестерни Прямозубые шестерни используются в передачах с параллельными валами. Они являются одним из наиболее часто используемых механизмов и встречаются в любом типе машин: часах, игрушках, станках и т.д.
    Косозубые шестерни Его зубья расположены по параллельной спирали вокруг цилиндра.
    Косозубые шестерни могут передавать движение (мощность) между параллельными осями или между осями, пересекающимися в любом направлении (даже перпендикулярном).
    Эта система зацепления зубьев обеспечивает более плавную передачу, чем у цилиндрических зубчатых колес, поскольку в один и тот же момент находится в контакте несколько пар зубьев, что делает систему более тихой, с передачей усилия и более равномерным и безопасным движением.
    Конические шестерни Конические шестерни используются для передачи движения между перпендикулярными осями или для осей с углами, отличными от 90 градусов.
    Это зубчатые колеса в форме усеченного конуса, которые могут быть прямыми или изогнутыми (гипоидными), причем последние широко используются в системах трансмиссии автомобилей.

    По положению звездочек

    Внешние шестерни Зубья обоих колес находятся на внешней поверхности.
    Внутренние шестерни Зубья одного из колес находятся с внутренней стороны.

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

    Например, для первичного электродвигателя со скоростью 1500 об/мин и ведомой машины со скоростью 500 об/мин соотношение будет следующим:

    Вход / выход или 1500 / 500 = 3,00: 1

    Проще говоря, три оборота входного вала производят один оборот выходного вала. Для достижения желаемой выходной мощности и скорости в редукторах могут использоваться различные механизмы передачи, крутящего момента. Зубчатые передачи различаются по эффективности, размерам, уровню шума, срокам службы и требований к техническому обслуживанию. Тип зубчатой передачи определяется конструкцией зубьев шестерни и тем, как они входят в зацепление.

    Цилиндрические шестерни

    Цилиндрические зубчатые колеса используются в механических редукторах для увеличения или уменьшения скорости устройства или увеличения крутящего момента путем передачи вращения и мощности от одного вала к другому через ряд сопряженных шестерен. Цилиндрические зубчатые колеса широко используются в редукторах и составляют львиную долю всего рынка зубчатых колес. Зубчатые колёса – это шестерни с зубьями, равномерно расположенными на цилиндрической поверхности. Существует два основных семейства цилиндрических зубчатых колес:

    1. Прямозубые шестерни
    2. Косозубые шестерни

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

    Прямозубые шестерни

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

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

    Косозубая шестерня позволяет использовать большую площадь контакта с зубьями, что увеличивает передаваемый крутящий момент на 10-15%, сохраняя при этом очень хорошую эффективность.

    Как же редуктор понижает частоту вращения?

    Цилиндрические редукторы имеют преимущества в отношении крутящего момента по сравнению с другими типами редукторов. Однако у них есть и недостатки. Цилиндрические модели имеют более низкую перегрузочную способность по сравнению планетарными, связано это с тем, что нагрузка передается на меньшее количество зубьев, что снижает эффективность и увеличивает их износ. Применение косозубых зубчатых колес в цилиндрических редукторах позволило существенно увеличить рабочий ресурс и максимальный крутящий момент. Для получения высокоэффективного зацепления между зубьями в косозубых зубчатых колесах используются закаленные зубья с изогнутым профилем. Косозубые шестерни настолько эффективны, что зубья практически не изнашиваются.

    Планетарные редукторы считаются самыми надежными относительно других приводов. По этой причине они используются во многих промышленных установках. Кроме того, планетарный редуктор универсальный и поэтому подходит для многих сфер индустрии, от промышленной автоматизации до робототехники. 
    В планетарных приводах солнечная шестерня расположена в центре редуктора потому что насаживается непосредственно на вал двигателя и передает движение другим зубчатым колесам, «сателлитам». Они прикреплены штифтами к «водилу» планетарной передачи и вращаются внутри зубчатой коронной шестерни, расположенной на внешней поверхности редуктора. Количество несущих сателлитов представляет собой ступени редуктора. Последний держатель сателлитов соединен с выходным валом. Такая конструкция позволяет планетарному редуктору передавать максимальный крутящий момент при тех же габаритных размерах, что и у других типов редукторов.

    Червячный редуктор. Механизм привода червячной передачи представляет собой комбинацию червяка (винта) и червячной передачи (колеса), которая используется для уменьшения скорости вращения и увеличения крутящего момента. Червяк всегда является ведущим, а колесо — ведомой шестерней. Обратное вращение невозможно и может привести к поломке редуктора. Червячный редуктор обычно используется для передачи крутящего момента в перпендикулярном направлении. Например, в трехмерном пространстве (плоскость X и Y и Z), если червяк вращается вдоль оси X, шестерня будет вращаться вдоль оси Z.

    Червячные редукторы обычно используются, когда требуется большое снижение скорости в компактном пространстве. Однако в червячных редукторах движение между червяком и зубчатым колесом является скользящим, следовательно, мощность теряется в виде тепла на трение. КПД червячных передач относительно низок по сравнению с цилиндрическими и косозубыми передачами.

    Срок службы редукторов общепромышленного исполнения:

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

    Наименование показателя

    Модель редуктора

    Значение показателя, ч

    90% ресурс передач и валов

    Конический, цилиндрический, коническо-цилиндрический, планетарный

    26000

    90% ресурс подшипников

    Червячный, глобоидный, волновой

    11000

    Конический, цилиндрический, коническо-цилиндрический, планетарный

    13000

    Червячный

    6000

    Волновой, глобоидный

    11000

    КПД, соотношение мощности и передаточного отношения

    КПД редуктора рассчитывается, как отношение мощности на входе и на выходе. Трение скольжения между зубьями шестерни считается одним из основных источников потери мощности в зубчатых передачах, а также потенциальным источником вибрации и шума. Точное моделирование КПД имеет первостепенное значение при анализе эффективности зубчатых передач.

    В последние годы оценка потерь мощности редукторов вызывает большой интерес, особенно в промышленных редукторах, где потери мощности в виде рассеивания тепла являются важным фактором КПД. Поскольку новые концепции зубчатых передач разрабатываются для удовлетворения большинства задач, быстрая и надежная оценка эффективности становится неизбежной при разработке понижающих редукторов. При рассмотрении расчетов КПД редукторов, хорошо известны потери в зацеплении шестерен, которые указаны в стандартах международной организации ISO 14179.

    Тип редуктора Показатель КПД в %
    Червячный 85
    Волновой 93
    Конический 96
    Цилиндрический 97
    Планетарный 93

    Зубчатые передачи, КПД и эффективность

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

    Где:

    Tin (Нм) — входной крутящий момент
    ωin (об/мин) — входная скорость
    i — передаточное число
    Tout (Нм) — выходной крутящий момент
    ωout (об/мин) — выходная скорость

    Мы можем вычислить входную мощность Pin [Вт] и выходную мощность Pout [Вт] как:

    Pin=ωin⋅Tin

    Pout=ωout⋅Tout

    КПД определяется как отношение выходной мощности к входной:

    η=Pout/Pin

    Любые механизмы, где есть движущиеся части, подвержены трению. Трение преобразует часть энергии в тепло, которое рассеивается в окружающей среде и, следовательно, теряется. Общее трение можно определить, как потерю мощности. Выходная мощность — это разница между входной мощностью и потерями Ploss [Вт]:

    Pout=Pin–Ploss

    или

    η=Pout/Pin=Pin–Ploss/Pin=Pin/Pin–Ploss/Pin=1–Ploss/Pin

    Выражение функции эффективности входной мощности и потерь мощности:

    η=1–Ploss/Pin

    Механический КПД простой передачи также можно рассчитать как функцию входного и выходного крутящего момента.

    Выходная скорость равна входной скорости, деленной на передаточное число:

    ωout=ωin/i

    Замена (1 формулы) и (2 формулы) в (3 формулу) дает выражение функции эффективности входного и выходного крутящего момента и скорости:

    η=Pout/Pin=ωout⋅Tout/ωin⋅Tin

    Замена (6 формулы) в (7 формулу) дает:

    η=ωin/i⋅Tout/ωin⋅Tin

    Из чего получается окончательное выражение функции эффективности входного / выходного крутящего момента и передаточного числа:

    η=Tout/i⋅Tin

    Подвижные части редуктора состоят из шестерен (простых или планетарных), синхронизаторов, валов и подшипников. Общий КПД редуктора в основном зависит от КПД зубчатой передачи и подшипников.

    Редукторы для промышленного оборудования

    Выбор промышленного редуктора требует всесторонней оценки условий эксплуатации и специфики типа применения. Они существенно отличаются от стандартных редукторов, поскольку эксплуатируются с большими нагрузками в длительном режиме. Эти редукторы рассчитаны на большой срок службы и имеют многократный запас прочности. Для управления скоростью и крутящим моментом в промышленном редукторе установлены зубчатые пары, образующие одну или несколько передач. В отличие от обычных, промышленные редукторы могут выполнять несколько задач на высоких скоростях в течение длительного периода. Существует множество различных видов редукторов. Наиболее распространёнными являются:

    • червячные;
    • цилиндрические;
    • глобоидные;
    • планетарные;
    • конические;
    • коническо-цилиндрические;
    • волновые с гибкими шестернями.

    Типовые сферы применения различных типов редукторов

    1. Цилиндрические редукторы — характеризуются высоким показателем КПД, поэтому имеют минимальные потери мощности. Применяются во всех отраслях промышленности, предпочтительно в тяжелых условиях. Область применения: экструдеры, конвейеры, дробилки, металлорежущие станки и другое оборудование, где требуется высокая механическая мощность.
    2. Червячные редукторы — оборудование, работающее в циклическом режиме (пуск / остановка). Основная сфера эксплуатации – станки малой и средней мощности. Устанавливаются редукторы между непересекающимися поперечными осями. Область применения: промышленные манипуляторы, дозаторы, кормораздатчики, небольшие транспортеры и конвейеры и т.п. Червячный привод имеет низкий КПД, поэтому передача большой мощности повлечет преждевременный износ зубчатой пары. Главное отличие от всех видов приводов – функция самоторможения.
    3. Глобоидный редуктор – это разновидность червячного привода, где цилиндрическое червячное колесо находится в зацеплении с глобоидным червяком. Глобоидная передача способна передавать большой крутящий момент и обладает большей кинематической точностью, по сравнению с червячным приводом аналогичного размера. Область применения: строительные лебедки, пассажирские лифты, подъемники для грузов.
    4. Планетарные редукторы – характеризуются высоким передаточным отношением и компактными размерами. Планетарная передача состоит из одной или нескольких зубчатых пар. Область применения: буровое оборудование, бетономешалки, конвейера, металлорежущие станки и грузоподъемная техника.
    5. Червячные двухступенчатые редукторы – применяются в установках, где требуется низкая частота вращения. Передаточное отношение двухступенчатого червячного редуктора может достигать – 10000, поэтому такой привод может применятся в системах спутникового позиционирования.
    6. Волновые редукторы – обладают высокой кинематической точностью и могут применяться в станках, которые предназначены для высокоточного производства либо обработки деталей. Области применения: роботы-манипуляторы, медицинская техника, ЧПУ станки.
    7. Коническо-цилиндрические редукторы — подходят для множества сфер промышленности. Двухступенчатая базовая конструкция расширена третьей цилиндрической ступенью. Эти редукторы имеют полый выходной вал и могут оснащаться цельным валом со стяжной муфтой. Область применения: мощные конвейера, транспортеры для сыпучих материалов, подъемники для крупногабаритных грузов, измельчители.
    8. Конические редукторы – имеют небольшое передаточное отношение, из-за чего область их применения ограничена. Обладают низким люфтом и длительным сроком службы. Используются в отраслях машиностроения.

    Червячный редуктор как основной элемент привода

    Червячные редукторы используются, когда необходимо получить большое снижение скорости, а окружающее пространство ограничено. Передаточное число определяется числом заходов червяка и количество зубьев червячной передачи. Червячные передачи имеют скользящий контакт, который не издает шума и вибраций. В качестве материалов для производства редуктора, применяется сталь и бронза. Как правило, червяк изготавливается из закаленной стали, а червячная передача — из относительно мягкого металла, такого как бронза. Это связано с тем, что количество зубьев червячной передачи относительно велико по сравнению с количеством витков на червяке, поэтому число заходов обычно составляет от 1 до 4. Применение бронзы, в качестве материала для зубчатого колеса, позволяет уменьшить трение и нагрев. Простая конструкция определяет низкую стоимость червячного редуктора, поэтому они широко применяются во многих отраслях производства.

    Цилиндрический редуктор — основной тип привода для промышленного оборудования

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

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

    Прямозубые цилиндрические зубчатые колеса — один из самых распространённых типов прецизионных цилиндрических шестерен. Эти шестерни имеют простую конструкцию с прямыми параллельными зубьями, расположенными по окружности корпуса цилиндра с центральным отверстием, которое надевается на вал. Во многих вариантах шестерня комплектуется ступицей, которая усиливает корпус шестерни вокруг отверстия без изменения геометрии поверхности шестерни. Центральное отверстие также можно отрегулировать (изменить диаметр), чтобы прямозубая шестерня могла поместиться на шлицевой или шпоночный вал.

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

    Смазка и охлаждение редукторов

    Зубчатые передачи редукторов требуют постоянной смазки. Для смазки используются минеральные или синтетические масла с присадками. Режим работы редуктора щадящий, поэтому замена масла выполняется реже чем, например, в двигателях автомобиля. Для смазки цилиндрических, планетарных и конических редукторов используется минеральное масло общего назначения. В червячных редукторах, в виду специфики зубчатой пары, для смазки используют более вязкие сорта масел. Если редуктор работает при минусовых значениях температуры, следует выбирать зимние масла, которые не густеют на морозе.
    Для отвода тепла на многих редукторах имеются специальные ребра, увеличивающие площадь корпуса. Эти ребра охлаждаются естественным способом, путем теплообмена с окружающей средой. В некоторых случаях применяются активные способы охлаждения, например, вентиляторы принудительного обдува.

    Обслуживание и ремонт редукторов

    Поломка редуктора почти всегда ведет к остановке всего производства, а это означает потерю прибыли и убытки. Неисправный редуктор может повлиять на безопасность оборудования и персонала. Вот почему важно своевременно осматривать и обсуживать редукторы. Необходимый перечень работ и время между обслуживанием указаны в паспорте изделия. Обслуживать редуктор может только квалифицированный персонал. Типовые операции по обслуживанию:

    • Замена масла в картере.
    • Замена фильтрующих масло элементов (при их наличии).
    • Измерение зазоров в подшипниках.
    • Измерение люфта шестерен.
    • Замена прокладок картера при открытии крышек.
    • Проверка натяжения болтов крепления и болтов муфт на валах.

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

    Способы монтажа редукторов

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

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

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

    При длительной работе редуктора, трущиеся части подвержены нагреву, поэтому используется редукторное масло. Температурные показатели масла при непрерывной эксплуатации редуктора более 30 минут существенно возрастают, а это влечет увеличение объема и внутреннего давления. Для уравновешивания давления применяются специальные сапуны.

    Правила выбора редуктора

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

    Всего пять основных параметров позволяют подобрать любой редуктор. По вопросам покупки приводных систем обращайтесь в наш отдел продаж.

    Что такое редуктор — это механизм для уменьшения оборотов

    Содержание статьи:

    1. Принцип работы редуктора
    2. Назначение редуктора


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

    Принцип работы редуктора

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

    По количеству передач редуктора выпускаются производителями следующих разновидностей:

    • одноступенчатые;
    • двухступенчатые;
    • многоступенчатые.

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

    По типу используемой в узле передачи редуктора подразделяют на следующие виды:

    • червячные;
    • конические;
    • планетарные;
    • волновые;
    • цилиндрические;
    • комбинированные. 

    Общее передаточное число регуляторов зависит от вида передачи, количества ступеней. Технический параметр может достигать 100 000. По количеству скоростей редукторы подразделяются на 1-3 и многоскоростные. Узлы устанавливаются в оборудование на общую раму с мотором, другими механизмами. Изделия могут иметь фланцевое или лаповое соединение.

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


    Что такое мотор редуктор читайте в нашем обзоре


    Скорость вращения при этом становиться меньше. На подсоединенный на выходе вал исполнительного механизма передается усилие, приводящее его в движение. Основной парой считается первая, скоростной червяк и шестерня, с соответствующим колесом. Она соединена с двигателем и определяет весь узел. Число ступеней равно количеству зацеплений в редукторе, с передаточным числом свыше единицы. Различные виды устройств отличаются между собой коэффициентом полезного действия.

    Назначение редуктора

    Наиболее распространенные узлы это червячные, цилиндрические и планетарные. В первых передача крутящего момента производится через зубчато-винтовую конструкцию. Основные элементы при этом особый винт и зубчатое червячное колесо. Агрегаты этого вида высокоэффективны. Устанавливаются в оборудование, где необходимы низкая угловая скорость, высокий крутящий момент.

    Червячные редукторы имеют плавный ход. Механизмы низко шумные, обладают высоким передаточным отношением. Агрегат обладает эффектом самоторможения. Их эффективно использовать в случаях необходимости передачи небольших мощностей.


    Червячный редуктор — описание и характеристики агрегата в обзоре от Termopolis


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

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

    Популярные товары

    Редуктор механический. Каталог, виды и характеристики

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

    Виды и типы

    Переходите к типам редукторов для получения подробной справочной информации – от сборочных чертежей и характеристик, до объема заливаемого масла и марок устанавливаемых подшипников.

    Определение. Устройство и принцип работы

    Механический редуктор — это механизм для передачи мощности, предназначенный для снижения количества оборотов мотора и увеличения крутящего момента, необходимого для привода промышленного оборудования.

    Из чего состоит? Основные детали конструкции: корпус, зубчатые колеса, вал-шестерни, валы, подшипники, крышки подшипников, прокладки и манжетные уплотнители.

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

    Устройство. В основе конструкции лежит принцип последовательное зацепление зубчатых колес разного диаметра. Количество шестерней определяется количеством ступеней – одноступенчатые, двухступенчатые, трёхступенчатые и многоступенчатые. Детали передач помещены в корпус, который фиксирует валы с подшипниками, создает условия смазывания, защищает шестерни от механических повреждений и снижает уровень шума.

    Допускается реверсивный режим работы (зачастую сопровождается снижением передаваемого момента силы на 30%).

    Горизонтальные цилиндрические

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

    Промышленные зубчатые редукторы бывают: одноступенчатые, двухступенчатые, трехступенчатые.

    По назначению делятся на:

    • общего назначения узкого типа – ЦУ, Ц2У, Ц3У, Ц2У-Н;
    • широкого типа для тяжелого и среднего машиностроения – ЦТНД, ЦДН, РМ, РЦД, Ц2Н;
    • крановые – Ц2, ГПШ, РК.

    По типу зацепления шестерен классифицируют на: косозубые, прямозубые, с шевронным зацеплением и зацеплением Новикова. Производятся с коническими и цилиндрическими валами, в виде зубчатой муфты или полым тихоходным валом.

    Вертикальные цилиндрические

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

    Устанавливаются в качестве приводов:

    • подъёмных механизмов и передвижения мостовых и козловых кранов – ВК и ВКУ
    • хода кран-балок (согласно ГОСТу 22045-89) и крановых тележек – редуктор А-400, В и Ц3ВК

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

    Червячные

    Червячные одноступенчатые редукторы. Принцип работы в зацеплении червяной передачи – винта с зубчатым колесом. Имеют малогабаритные размеры, дают возможность передачи вращения под углом 90°. Производятся в алюминиевых корпусах (2Ч-40, 2Ч-63, 2Ч-80) и чугунных (Ч-100, Ч-125, Ч-160, РЧН и РЧП).

    Материал колеса – бронза, вал изготавливается из стали. Промышленные редукторы модели 2Ч могут устанавливаться с вертикальным и горизонтальным расположением тихоходного вала, Ч – с возможностью расположения червячной пары червяк под и над колесом (имеют отлитые лапы сверху и снизу), РЧН и РЧП устанавливаются только в одном положении.

    Коническо-цилиндрические

    Коническо-цилиндрический редуктор включает в свое строение два вида передач. Особенностью, является возможность передачи крутящего момента с изменением направления оси вращения (быстроходный вал в торце). Технические преимущества: высокий КПД, удобство при компоновке, низкий шум при работе.

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

    Мотор-редукторы

    Мотор-редуктор — приводной агрегат, представляющий собой совмещенный в одном блоке механический редуктор и электродвигатель. Незаменимый элемент электропривода для всех видов промышленности. Напряжение питания – 220В–380В. Достоинства: компактные размеры, удобный монтаж, высокий КПД, простота эксплуатации и обслуживания, доступная цена.

    По виду передачи мотор-редукторы 220В и 380В классифицируют:

    • червячные – МЧ, 2МЧ, МЧ2
    • планетарные – 1мпз, 3МП, 4МП, 5МП, 6МП
    • цилиндрические – 1мц2с, 2мц2с, 3мц2с, 4мц2с, 5мц2с, 6мц2с

    Мотор-редукторы устанавливают на оборудование, требующее низких скоростей вращения – конвейеры, элеваторы, бетономешалки, дозаторы, дождевальные установки.

    Правила покупки. Цены. Фото

    Цена на механический редуктор зависит от типоразмера, схемы сборки и передаточного числа. Модели с шевронным зацеплением и зацеплением Новикова, стоят дороже косозубых за счет сложности конструкции, и требований к точности зубьев. В червячных редукторах используется бронза, что также отражается в цене запчастей.

    Чтобы купить механический редуктор, необходима полная маркировка, либо технические требования — вид, передаточное отношение, вариант сборки, исполнение входных и выходных валов.

    При работе промышленных понижающих редукторов в паре – соблюдайте полное соответствие фактических передаточных чисел (отличается от номинального). Малейшее отличие в передатках приведет к быстрому выходу оборудования из строя.

    Фото промышленных механических редукторов различных видов – от распространенных двухступенчатых Ц2У, червячных Ч и крановых вертикальных А400 до редких крупногабаритных Ц2-1000.

    «Системы качества» добились потрясающей статистики безотказности и надежности. Все промышленные механические редукторы проходят аттестационные испытания и принимаются ОТК. Во время испытаний подлежат проверке следующие параметры: крутящий момент, температура нагрева корпуса и масла, уровень шума, КПД, консольно-радиальные нагрузки на выходных валах, работоспособность при кратковременных перегрузках, ресурс подшипников, эффективность смазывания и отсутствие течи масла под давлением. Согласно технического задания заказчика, поставляем промышленные редукторы в комплекте с тормозными шкивами (барабанами), колодочными тормозами ТКГ, зубчатыми муфтами МЗ или МЗП.
    Заказать новый редуктор по телефону

    Марки масел для смазки редукторов

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

    Тип механического редуктора Марка масел Температура окружающей среды
    Червячный ИГП-152, ИГП-182, МС-20 0…+50 °С
    АСЗП-6, АСЗП-10 –40…0 °С
    Трансол-100 –40…+50 °С
    Планетарный ТАп-15, ТСп-14,5, ГСп-10 0…+50 °С
    ТС-з9 –40…0 °С
    Цилиндрический ТСп-10 –40…0 °С
    ИРП-150, ИСП-110 –10…+25 °С
    ИТП-200, ИТП-300 –15…+50 °С

    Выбрать и купить масло для промышленных механических редукторов можно связавшись с техническим специалистом «Систем Качества».

    Изготовление запчастей и ремонт

    В настоящее время, цена изготовления нового редуктора слишком высока для украинского потребителя. Поэтому, при покупке крупногабаритных промышленных редукторов отдается преимущество неликвидам. Для сравнения, цена редуктора Ц2У-250 с хранения – 24 000 грн, нового может достигать 100 000 грн. В отдельных случаях выходит дешевле купить редуктор с хранения, чем произвести ремонт или купить запчасти.

    Основы Redux, часть 3: Состояние, действия и редукторы

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

    Введение #

    В части 2: Концепции Redux и поток данных мы рассмотрели, как Redux может помочь нам создавать поддерживаемые приложения, предоставляя нам единое центральное место для размещения глобального состояния приложения.Мы также обсудили основные концепции Redux, такие как диспетчеризация объектов действий и использование функций-редукторов, которые возвращают новые значения состояния.

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

    Пример приложения не является полным готовым к производству проектом . Цель состоит в том, чтобы помочь вам изучить основные API-интерфейсы Redux и шаблоны использования, а также указать правильное направление, используя несколько ограниченных примеров.Кроме того, некоторые из первых элементов, которые мы создаем, будут обновлены позже, чтобы показать более эффективные способы работы. Пожалуйста, прочтите весь учебник, чтобы увидеть все используемые концепции. .

    Настройка проекта №

    Для этого руководства мы создали предварительно настроенный стартовый проект, в котором уже настроен React, есть некоторые стили по умолчанию и есть поддельный REST API, который позволит нам писать фактические запросы API в нашем приложение. Вы будете использовать это как основу для написания фактического кода приложения.

    Для начала вы можете открыть этот CodeSandbox и разветвить его:

    Вы также можете клонировать тот же проект из этого репозитория Github. После клонирования репо вы можете установить инструменты для проекта с npm install и запустить его с npm start .

    Если вы хотите увидеть окончательную версию того, что мы собираемся построить, вы можете проверить шаги руководства ветка или посмотреть окончательную версию в этом CodeSandbox.

    Создание нового проекта Redux + React #

    Завершив это руководство, вы, вероятно, захотите попробовать поработать над своими собственными проектами. Мы рекомендуем использовать шаблоны Redux для Create-React-App как самый быстрый способ создать новый проект Redux + React . Он поставляется с уже настроенными Redux Toolkit и React-Redux с использованием модернизированной версии примера приложения «счетчик», который вы видели в Части 1. Это позволяет вам сразу приступить к написанию фактического кода приложения без необходимости добавлять пакеты Redux и настраивать магазин.

    Если вы хотите узнать конкретные подробности о том, как добавить Redux в проект, см. Это объяснение:

    Подробное объяснение: Добавление Redux в проект React

    Шаблон Redux для CRA поставляется с уже настроенными Redux Toolkit и React-Redux .Если вы настраиваете новый проект с нуля без этого шаблона, выполните следующие действия:

    • Добавьте пакеты @ reduxjs / toolkit и response-redux
    • Создайте хранилище Redux с помощью RTK configureStore API, и передайте хотя бы одну функцию редуктора
    • Импортируйте хранилище Redux в файл точки входа вашего приложения (например, src / index.js )
    • Оберните корневой компонент React с помощью компонента из React-Redux , например:
      ReactDOM.render (  , document.getElementById ('root'))  
    Копировать
    Изучение исходного проекта #

    Этот первоначальный проект основан на стандартном Create-React -Шаблон проекта приложения, с некоторыми изменениями.

    Давайте быстро посмотрим, что содержит исходный проект:

    • / src
      • index.js : файл точки входа для приложения. Он отображает основной компонент .
      • App.js : основной компонент приложения.
      • index.css : стили для всего приложения
      • / api
        • client.js : небольшой клиент запросов AJAX, который позволяет нам делать запросы GET и POST
        • server.js : предоставляет поддельный REST API для наших данных. Наше приложение будет получать данные с этих поддельных конечных точек позже.
      • / exampleAddons : содержит некоторые дополнительные надстройки Redux, которые мы будем использовать позже в руководстве, чтобы показать, как все работает

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

    Итак, приступим!

    Запуск примера приложения Todo #

    Нашим примером приложения будет небольшое приложение «todo». Вы, наверное, видели примеры приложений todo раньше — они делают хорошие примеры, потому что они позволяют нам показать, как делать такие вещи, как отслеживание списка элементов, обработка пользовательского ввода и обновление пользовательский интерфейс при изменении этих данных, что происходит в обычном приложении.

    Определение требований #

    Начнем с определения начальных бизнес-требований для этого приложения:

    • Пользовательский интерфейс должен состоять из трех основных разделов:
      • Поле ввода, позволяющее пользователю вводить текст нового элемента задачи.
      • Список всех существующих задач
      • Нижний колонтитул, в котором отображается количество незавершенных задач и параметры фильтрации.
    • Элементы списка задач должны иметь флажок, который переключает их статус «выполнено».Мы также должны иметь возможность добавить цветной тег категории для предопределенного списка цветов и удаление элементов списка дел.
    • На счетчике должно быть число активных задач во множественном числе: «0 элементов», «1 элемент», «3 элемента» и т. Д.
    • Должны быть кнопки, чтобы отметить все задачи как выполненные и очистить все завершенные задачи путем их удаления.
    • Должно быть два способа фильтрации отображаемых задач в списке:
      • Фильтрация на основе отображения «Все», «Активные» и «Завершенные» задачи
      • Фильтрация на основе выбора одного или нескольких цветов и отображение любых задач. чей тег соответствует этим цветам

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

    Конечная цель — это приложение, которое должно выглядеть так:

    Проектирование значений состояния #

    Один из основных принципов React и Redux заключается в том, что ваш пользовательский интерфейс должен основываться на вашем состоянии . Итак, один из подходов к разработке приложения — сначала подумать обо всех состояниях, необходимых для описания того, как приложение работает. Это тоже хорошая идея чтобы попытаться описать свой пользовательский интерфейс с как можно меньшим количеством значений состояния, чтобы было меньше данных, которые вам нужно отслеживать и обновить.

    Концептуально это приложение имеет два основных аспекта:

    • Фактический список текущих задач
    • Текущие параметры фильтрации

    Нам также необходимо отслеживать данные, которые пользователь вводит в поле » Поле ввода «Добавить Todo», но это менее важно и мы разберемся с этим позже.

    Для каждого элемента todo нам нужно сохранить несколько частей информации:

    • Текст, введенный пользователем
    • Логический флаг, указывающий, выполнено оно или нет
    • Уникальное значение ID
    • Цветовая категория, если выбрана

    Наше поведение фильтрации, вероятно, можно описать с помощью некоторых перечислимых значений:

    • Завершенный статус: «Все», «Активно» и «Завершено»
    • Цвета: «Красный», «Желтый», «Зеленый», » Синий »,« Оранжевый »,« Фиолетовый »

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

    Проектирование структуры состояний #

    В Redux, состояние нашего приложения всегда хранится в простых объектах JavaScript и массивах . Это означает, что вы не можете ставить другие вещи в состоянии Redux — никаких экземпляров классов, встроенные типы JS, такие как Map / Set Promise / Date , функции или что-либо еще, что не является простыми данными JS.

    Значение корневого состояния Redux почти всегда представляет собой простой объект JS с другими данными, вложенными в него.

    Основываясь на этой информации, теперь мы должны быть в состоянии описать типы значений, которые нам нужны в нашем состоянии Redux:

    • Во-первых, нам нужен массив объектов todo item. Каждый элемент должен иметь следующие поля:
      • id : уникальный номер
      • текст : текст, введенный пользователем
      • завершен : логический флаг
      • цвет : дополнительная цветовая категория
    • Затем нам нужно описать наши параметры фильтрации.Нам необходимо:
      • Текущее «завершенное» значение фильтра
      • Массив текущих выбранных цветовых категорий

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

      const todoAppState = { задачи: [{id: 0, текст: 'Learn React', завершено: true}, {id: 1, text: 'Learn Redux', выполнено: false, color: 'purple'}, {id: 2, text: «Постройте что-нибудь забавное!», Завершено: false, цвет: «синий»}], фильтры: {статус: «Активный», цвета: [«красный», «синий»]}}  
    Копировать

    Важно отметить, что — это нормально иметь другие значения состояния вне Redux! .Этот пример пока достаточно мал, чтобы у нас действительно было все наше состояние в хранилище Redux, но, как мы увидим позже, некоторые данные действительно не нужно хранить в Redux (например, «открыт ли этот раскрывающийся список?» Или «текущее значение формы ввода»).

    Разработка действий #

    Действия — это простые объекты JavaScript, которые имеют поле типа . Как упоминалось ранее, вы можете рассматривать действие как событие, которое описывает что-то, что произошло в приложении .

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

    • Добавить новую запись задачи на основе текста, введенного пользователем
    • Переключить завершенный статус задачи
    • Выбрать цветовую категорию для задачи
    • Удалить задачу
    • Отметить все задачи как завершенные
    • Очистить все завершенные задачи
    • Выбрать другое значение фильтра «Завершено»
    • Добавить новый цветной фильтр
    • Удалить цветной фильтр

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

    Хранилище Redux не заботится о фактическом тексте поля action.type . Однако ваш собственный код будет выглядеть в action. type , чтобы узнать, требуется ли обновление. Кроме того, вы часто будете смотреть на строки типа действия в Redux. DevTools Extension во время отладки, чтобы узнать, что происходит в вашем приложении. Итак, попробуйте выбрать типы действий, которые читабельны и четко описывают, что происходит — вам будет намного легче понять вещи, когда вы посмотрите на них позже!

    На основе этого списка вещей, которые могут произойти, мы можем создать список действий, которые будет использовать наше приложение:

    • {type: 'todos / todoAdded', payload: todoText}
    • {type: ' todos / todoToggled ', полезная нагрузка: todoId}
    • {тип:' todos / colorSelected, полезная нагрузка: {todoId, color}}
    • {тип: 'todos / todoDeleted', полезная нагрузка: todoId}
    • {type: ‘todos / allCompleted’}
    • {type: 'todos / completedCleared'}
    • {type: 'filters / statusFilterChanged', payload: filterValue}
    • {type: 'filters / colorFilterChanged ', payload: {color, changeType}}

    В этом случае действия в основном содержат по одной дополнительной части данных за штуку, поэтому мы можем поместить это непосредственно в действие .поле полезной нагрузки . Мы могли бы разделить поведение цветового фильтра на два действия: одно для «добавлено» и одно для «удалено», но в этом случае мы сделаем это как одно действие с дополнительным полем внутри специально, чтобы показать, что у нас могут быть объекты в качестве полезной нагрузки действия.

    Как и данные о состоянии, действия должны содержать наименьший объем информации, необходимой для описания того, что произошло .

    Написание редукторов #

    Теперь, когда мы знаем, как выглядят наша структура состояний и наши действия, пора написать наш первый редуктор.

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

    Создание корневого редуктора #

    Приложение Redux действительно имеет только одну функцию редуктора: функцию «корневого редуктора», которую вы передадите в createStore позже. Эта одна функция корневого редуктора отвечает за обработку всех отправляемых действий и вычисление того, каким должен быть результат нового состояния всего каждый раз.

    Давайте начнем с создания файла reducer.js в папке src вместе с index.js и App.js .

    Каждому редуктору нужно какое-то начальное состояние, поэтому для начала мы добавим несколько фальшивых записей todo. Затем мы можем написать схему логики внутри функции редуктора:

    src / reducer.js

      const initialState = {todos: [{id: 0, text: 'Learn React', completed: true}, { id: 1, текст: 'Learn Redux', завершено: false, цвет: 'purple'}, {id: 2, text: 'Постройте что-нибудь забавное!', выполнено: false, color: 'blue'}], фильтры: {статус: 'Все', цвета: []}}
    экспортировать функцию по умолчанию appReducer (state = initialState, action) {switch (action.type) {default: return state}}  
    Копировать

    Редуктор может быть вызван с undefined в качестве значения состояния при инициализации приложения. Если это произойдет, нам нужно предоставить значение начального состояния, чтобы остальной части кода редуктора было с чем работать. Редукторы обычно используют синтаксис аргумента по умолчанию ES6 для предоставления начального состояния: (state = initialState, action) .

    Затем давайте добавим логику для обработки действия todos / todoAdded .

    Мы знаем, что нам нужно проверить, соответствует ли тип текущего действия этой конкретной строке. Затем нам нужно вернуть новый объект, содержащий всех состояний, даже для полей это не изменилось.

    src / reducer.js

      function nextTodoId (todos) {const maxId = todos.reduce ((maxId, todo) => Math.max (todo.id, maxId), -1) return maxId + 1}
    экспортировать функцию по умолчанию appReducer (state = initialState, action) {switch (action.type) {case 'todos / todoAdded': {return {...state, todos: [... state.todos, {id: nextTodoId (state.todos), text: action.payload, completed: false}]}} default: return state}}  
    Копировать

    Это .. Ужасно много работы, чтобы добавить в состояние одну задачу. Зачем нужна вся эта дополнительная работа?

    Правила редукторов #

    Ранее мы говорили, что редукторы должны всегда следовать некоторым особым правилам :

    • Они должны вычислять только новое значение состояния на основе состояния и действия аргументов
    • Они являются не разрешено изменять существующее состояние .Вместо этого они должны сделать неизменяемых обновлений , скопировав существующее состояние и внося изменения в скопированные значения.
    • Они не должны выполнять асинхронную логику или другие «побочные эффекты».

    «Побочный эффект» — это любое изменение состояния или поведения, которое можно увидеть за пределами возврата значения из функции . Вот некоторые распространенные побочные эффекты:

    • Запись значения в консоль
    • Сохранение файла
    • Установка асинхронного таймера
    • Выполнение HTTP-запроса AJAX
    • Изменение некоторого состояния, которое существует вне функции, или изменение аргументов функции
    • Генерация случайных чисел или уникальных случайных идентификаторов (например, Math.random () или Date.now () )

    Любая функция, которая следует этим правилам, также известна как «чистая» функция , даже если она специально не написана как функция-редуктор.

    Но почему эти правила важны? Есть несколько разных причин:

    • Одна из целей Redux — сделать ваш код предсказуемым. Когда вывод функции рассчитывается только на основе входных аргументов, легче понять, как работает этот код, и протестировать его.
    • С другой стороны, если функция зависит от внешних переменных или ведет себя случайным образом, вы никогда не знаете, что произойдет, когда вы ее запустите.
    • Если функция изменяет другие значения, включая аргументы, это может неожиданно изменить способ работы приложения. Это может быть обычным источником ошибок, таких как «Я обновил свое состояние, но теперь мой пользовательский интерфейс не обновляется, когда должен!»
    • Некоторые возможности Redux DevTools зависят от того, правильно ли ваши редукторы соблюдают эти правила.

    Правило о «неизменяемых обновлениях» особенно важно, и о нем стоит поговорить подробнее.

    Редукторы и неизменяемые обновления #

    Ранее мы говорили о «мутации» (изменение существующих значений объекта / массива) и «неизменности» (обработка значений как чего-то, что нельзя изменить).

    В Redux, наши редукторы никогда не позволяют изменять исходные / текущие значения состояния!

    Существует несколько причин, по которым вы не должны изменять состояние в Redux:

    • Это вызывает ошибки, такие как некорректное обновление пользовательского интерфейса для отображения последних значений
    • Это затрудняет понимание того, почему и как состояние было изменено. обновлено
    • Это затрудняет написание тестов
    • Это нарушает возможность правильного использования «отладки путешествия во времени»
    • Это идет вразрез с предполагаемым духом и шаблонами использования для Redux

    Итак, если мы не можем изменить оригиналы , как вернуть обновленное состояние?

    Редукторы могут делать только копий исходных значений, а затем они могут изменять копии.

      return {... state, value: 123}  
    Copy

    Мы уже видели, что можем писать неизменяемые обновления вручную, используя операторы распространения массивов / объектов JavaScript и другие функции, которые возвращают копии исходных значений.

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

    Однако, если вы думаете, что «написание неизменяемых обновлений вручную таким образом будет трудно запомнить и сделать правильно»… Да, ты прав! 🙂

    Написание неизменяемой логики обновления вручную — это сложно, а , случайно изменяющее состояние в редукторах, является единственной наиболее частой ошибкой, которую делают пользователи Redux .

    В реальных приложениях вам не придется вручную писать эти сложные вложенные неизменяемые обновления . В части 8: Современный Redux с Redux Toolkit вы узнайте, как использовать Redux Toolkit для упрощения написания неизменной логики обновления в редукторах.

    Обработка дополнительных действий #

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

    src / reducer.js

      экспортная функция по умолчанию appReducer (state = initialState, action) {switch (action.type) {case 'todos / todoAdded': {return {... state, todos: [... state.todos, {id: nextTodoId (state.todos), text: action.payload, completed: false}]}} case 'todos / todoToggled': {return {...state, задачи: state.todos.map (todo => {if (todo.id! == action.payload) {return todo}
                        return {... todo, completed:! todo.completed}})}} default: return state}}  
    Копировать

    И поскольку мы сосредоточились на состоянии задач, давайте добавим случай для обработки «выбора видимости также изменилось действие «:

    src / reducer.js

      экспорт функции по умолчанию appReducer (state = initialState, action) {switch (action.type) {case 'todos / todoAdded': {return {... state, todos: [... state.todos, {id: nextTodoId (state.todos), text: action.payload, completed: false}]} } case 'todos / todoToggled': {return {... state, todos: state.todos.map (todo => {if (todo.id! == action.payload) {return todo})
              return {... todo, завершено:! todo.завершено}})}} case 'filters / statusFilterChanged': {return {... state, filters: {... state.filters, status: action.payload}}} по умолчанию: return state}}  
    Копировать

    Мы обработал всего 3 действия, но это уже становится длинновато. Если мы попытаемся обработать каждое действие в этом редукторе функция, будет трудно все это прочитать.

    Вот почему редукторы обычно делятся на несколько меньших функций редукторов — чтобы упростить понимание и поддерживать логику редуктора.

    Разделение редукторов #

    В рамках этого редукторы Redux обычно разделяются на части на основе раздела состояния Redux, в котором они обновляют . В настоящее время наше состояние приложения todo состоит из двух разделов верхнего уровня: state.todos и state.filters . Итак, мы можем разделить функцию большого корневого редуктора на два меньших редуктора — todosReducer и FiltersReducer .

    Итак, где же должны жить эти разделенные функции редуктора?

    Мы рекомендуем организовать папки и файлы приложений Redux на основе «функций». — код, относящийся к определенной концепции. или область вашего приложения. Код Redux для конкретной функции обычно записывается в виде одного файла, известного как «slice» файл , который содержит всю логику редуктора и весь связанный с действием код для этой части состояния вашего приложения.

    Из-за этого редуктор для определенного раздела состояния приложения Redux называется «редуктор среза» . Как правило, некоторые из объектов действия будут тесно связаны с конкретным редуктором среза, поэтому строки типа действия должны начинаться с имени этой функции (например, 'todos' ) и описывать произошедшее событие (например, 'todoAdded '), объединенные в одну строку (' todos / todoAdded ').

    В нашем проекте создайте новую папку features , а затем папку todos внутри нее. Создайте новый файл с именем todosSlice.js , и давайте вырежем и вставим исходное состояние, связанное с задачей, в этот файл:

    src / features / todos / todosSlice.js

      const initialState = [{id: 0, текст: 'Learn React', завершено: true}, {id: 1, text: 'Learn Redux', выполнено: false, цвет: 'purple'}, {id: 2, text: 'Постройте что-нибудь забавное!', завершено : false, color: 'blue'}]
    функция nextTodoId (todos) {const maxId = todos.reduce ((maxId, todo) => Math.max (todo.id, maxId), -1) return maxId + 1}
    экспортировать функцию по умолчанию todosReducer (state = initialState, action) {switch (action.type) {default: return state}}  
    Копировать

    Теперь мы можем скопировать логику обновления задач. Однако здесь есть важное отличие. Этот файл должен обновлять только состояние, связанное с задачами — он больше не вложен! Это еще одна причина, по которой мы разделили редукторы. Поскольку состояние задач — это сам по себе массив, нам не нужно копировать сюда внешний объект корневого состояния.Это упрощает чтение этого редуктора.

    Это называется составом редуктора , и это фундаментальный образец построения приложений Redux.

    Вот как выглядит обновленный редуктор после того, как мы обработаем эти действия:

    src / features / todos / todosSlice.js

      экспортировать функцию по умолчанию todosReducer (state = initialState, action) {switch (action.type) {case ' todos / todoAdded ': {return [... state, {id: nextTodoId (state), text: action.полезная нагрузка, завершено: false}]} case 'todos / todoToggled': {return state.map (todo => {if (todo.id! == action.payload) {return todo}
            return {... todo, completed:! todo.completed}})} default: return state}}  
    Копировать

    Это немного короче и легче для чтения.

    Теперь мы можем сделать то же самое с логикой видимости. Создайте src / features / filters / filtersSlice.js , и переместим туда весь код, связанный с фильтрами:

    src / features / filters / filtersSlice.js

      const initialState = {status: 'All', colors: []}
    экспортировать функцию по умолчанию FiltersReducer (state = initialState, action) {switch (action.type) {case 'filters / statusFilterChanged': {return {... state, status: action.payload}} default: return state}}  
    Копировать

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

    Объединение редукторов #

    Теперь у нас есть два отдельных файла срезов, каждый со своей собственной функцией редуктора срезов. Но, как мы уже говорили ранее, при создании хранилища Redux требуется и одна функция корневого редуктора . Итак, как мы можем вернуться к корневому редуктору, не помещая весь код в одну большую функцию?

    Поскольку редукторы являются обычными функциями JS, мы можем импортировать редукторы фрагментов обратно в файл reducer.js и написать новый корневой редуктор, единственная задача которого — вызывать две другие функции.

    src / reducer.js

      импортировать todosReducer из './features/todos/todosSlice'import filtersReducer из' ./features/filters/filtersSlice '
    экспортировать функцию по умолчанию rootReducer (state = {}, action) {return {todos: todosReducer (state.todos, action), filters: filtersReducer (state.filters, action)}}  
    Копировать

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

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

    combReducers #

    Мы видим, что новый корневой редуктор делает одно и то же для каждого фрагмента: вызывает редуктор фрагмента, передает фрагмент состояния, принадлежащего этому редуктору, и присваивает результат обратно корню. государственный объект. Если бы мы добавили больше срезов, узор повторил бы.

    В базовую библиотеку Redux входит утилита combReducers , которая выполняет тот же шаблонный шаг за нас.Мы можем заменить наш рукописный rootReducer на более короткий, созданный combReducers .

    Теперь, когда нам нужно combReducers , пришло время фактически установить базовую библиотеку Redux :

    Как только это будет сделано, мы можем импортировать combReducers и использовать его:

    src / reducer.js

      import { combReducers} из "redux"
    импортировать todosReducer из './features/todos/todosSlice'import filtersReducer из'./ features / filters / filtersSlice '
    const rootReducer = combReducers ({todos: todosReducer, filters: filtersReducer})
    экспорт по умолчанию rootReducer  
    Копировать

    combReducers принимает объект, в котором имена ключей станут ключами в вашем объекте корневого состояния, а Значения — это функции редуктора среза, которые знают, как обновлять эти срезы состояния Redux.

    Помните, имена ключей, которые вы даете combReducers , определяют, какими будут имена ключей вашего объекта состояния!

    Что вы узнали #

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

    Вот содержимое нашего приложения на данный момент:

    • Приложения Redux используют простые объекты JS, массивы и примитивы в качестве значений состояния
      • Значение корневого состояния должно быть простым объектом JS
      • Состояние должно содержать наименьший объем данных, необходимый для работы приложения
      • Классы, обещания, функции и другие непростые значения, если не перейдут в состояние Redux
      • Редукторы не должны создавать случайные значения, такие как Math.random () или Date.now ()
      • Это нормально, когда другие значения состояния, которых нет в хранилище Redux (например, состояние локального компонента), бок о бок с Redux
    • Действия представляют собой простые объекты с поле типа , описывающее, что произошло
      • Поле типа должно быть читаемой строкой и обычно записывается как 'feature / eventName'
      • Действия могут содержать другие значения, которые обычно хранятся в действие.полезная нагрузка поле
      • Действия должны иметь наименьший объем данных, необходимых для описания того, что произошло
    • Редукторы — это функции, которые выглядят как (состояние, действие) => newState
      • Редукторы всегда должны следовать особым правилам:
        • Вычислять новое состояние только на основе состояния и действия аргументы
        • Никогда не изменять существующее состояние — всегда возвращать копию
        • Нет «побочных эффектов», таких как вызовы AJAX или асинхронная логика
    • Редукторы должны быть разделены, чтобы их было легче читать.
      • Редукторы обычно разделяются на основе ключей состояния верхнего уровня или «фрагментов» состояния
      • Редукторы обычно записываются в файлы «фрагментов», организованные в папки «функций»
      • Редукторы можно комбинировать вместе с Redux. . определяют ключи объекта состояния верхнего уровня

    Что дальше? #

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

    В части 4: Store мы увидим, как создать хранилище Redux и запустить нашу логику редуктора.

    Что такое редуктор в JavaScript / React / Redux?

    Концепция Reducer стала популярной в JavaScript с появлением Redux как решения управления состоянием для React. Но не беспокойтесь, вам не нужно изучать Redux, чтобы понимать редукторы. В основном редукторы используются для управления состоянием в приложении.Например, если пользователь что-то пишет в поле ввода HTML, приложение должно управлять этим состоянием пользовательского интерфейса (например, контролируемыми компонентами).

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

     
     

    (состояние, действие) => newState

    В качестве примера в JavaScript для сценария увеличения числа на единицу это будет выглядеть следующим образом:

     
     

    функция counterReducer (состояние, действие) {

    возврат состояния + 1;

    }

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

     
     

    const counterReducer = (state, action) => {

    return state + 1;

    };

    В этом случае текущее состояние является целым числом (например,грамм. count), а функция reducer увеличивает счетчик на единицу. Если мы переименуем аргумент state в count , он может быть более читаемым и доступным для новичков в этой концепции. Однако имейте в виду, что счетчик по-прежнему является состоянием:

     
     

    const counterReducer = (count, action) => {

    return count + 1;

    };

    Функция reducer — это чистая функция без каких-либо побочных эффектов, что означает, что при одинаковом вводе (например,грамм. состояние и действие ), ожидаемый результат (например, newState ) всегда будет одинаковым. Это делает функции-редукторы идеальными для анализа изменений состояния и их изолированного тестирования. Вы можете повторить тот же тест с тем же входом, что и аргументы, и всегда ожидать один и тот же результат:

     
     

    expect (counterReducer (0)). To.equal (1);

    ожидать (counterReducer (0)). To.equal (1);

    В этом суть функции редуктора.Однако мы еще не затронули второй аргумент редуктора: действие. Действие обычно определяется как объект со свойством типа . В зависимости от типа действия редуктор может выполнять условные переходы между состояниями:

     
     

    const counterReducer = (count, action) => {

    if (action.type === 'INCREASE') {

    return count +1;

    }

    if (action.type === 'DECREASE') {

    счетчик возврата - 1;

    }

    счетчик возврата;

    };

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

     
     

    expect (counterReducer (0, {тип: 'УВЕЛИЧИТЬ'})). to.equal (1);

    ожидать (counterReducer (0, {тип: 'УВЕЛИЧИТЬ'})). To.equal (1);

    ожидать (counterReducer (0, {тип: 'УМЕНЬШИТЬ'})). To.equal (-1);

    ожидать (counterReducer (0, {type: 'UNMATCHING_ACTION'})).to.equal (0);

    Однако более вероятно, что вы увидите оператор switch case в пользу операторов if else, чтобы отобразить несколько переходов между состояниями для функции редуктора. Следующий редуктор выполняет ту же логику, что и раньше, но выражается с помощью оператора switch case:

     
     

    const counterReducer = (count, action) => {

    switch (action.type) {

    case 'INCREASE':

    счетчик возврата + 1;

    case 'DECREASE':

    количество возвращаемых данных - 1;

    по умолчанию:

    счетчик возврата;

    }

    };

    В этом сценарии счетчик сам по себе является состоянием, к которому мы применяем наши изменения состояния путем увеличения или уменьшения счетчика.Однако часто в качестве состояния используется не примитив JavaScript (например, целое число для подсчета), а сложный объект JavaScript. Например, счетчик может быть одним свойством нашего объекта state :

     
     

    const counterReducer = (state, action) => {

    switch (action.type) {

    case 'INCREASE':

    return {... состояние, количество: состояние.count + 1};

    case 'DECREASE':

    return {... состояние, количество: состояние.count - 1};

    по умолчанию:

    состояние возврата;

    }

    };

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

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

    • Поскольку мы знаем, что состояние является неизменяемой структурой данных, мы можем использовать оператор распространения JavaScript, чтобы создать новый объект состояния из входящего состояния и ту часть, которую мы хотим изменить (например, свойство count ). Таким образом мы гарантируем, что другие свойства, которые не касаются входящего объекта состояния, остаются неизменными для нового объекта состояния.

    Давайте посмотрим на эти два важных момента в коде на другом примере, где мы хотим изменить фамилию объекта человека с помощью следующей функции-редуктора:

     
     

    const personReducer = (person, action) => {

    switch (action.type) {

    case 'INCREASE_AGE':

    return {... person, age: person.age + 1};

    case 'CHANGE_LASTNAME':

    return {... person, lastname: action.lastname};

    по умолчанию:

    возврат лица;

    }

    };

    В тестовой среде мы могли изменить фамилию пользователя следующим образом:

     
     

    const initialState = {

    firstname: 'Liesa',

    lastname: 'Huppertz',

    age: 30 ,

    };

    const action = {

    type: 'CHANGE_LASTNAME',

    lastname: 'Wieruch',

    };

    const result = personReducer (initialState, действие);

    ожидать (результат).to.equal ({

    имя: 'Liesa',

    фамилия: 'Wieruch',

    возраст: 30,

    });

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

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

    Часто дополнительные полезные данные действия помещаются в другое общее свойство полезных данных , чтобы сохранить верхний уровень свойств объекта действия более общего (.например, {тип, полезная нагрузка} ). Это полезно для того, чтобы тип и полезная нагрузка всегда были разделены бок о бок. В нашем предыдущем примере кода действие изменилось бы на следующее:

     
     

    const action = {

    type: 'CHANGE_LASTNAME',

    payload: {

    lastname: 'Wieruch',

    },

    };

    Функция редуктора тоже должна измениться, потому что она должна погрузиться на один уровень глубже в действие:

     
     

    const personReducer = (person, action) => {

    switch (action.type) {

    case 'INCREASE_AGE':

    return {... person, age: person.age + 1};

    case 'CHANGE_LASTNAME':

    return {... person, lastname: action.payload.lastname};

    по умолчанию:

    возврат лица;

    }

    };

    По сути, вы узнали все, что вам нужно знать о редукторах. Они используются для выполнения переходов между состояниями от A к B с помощью действий, которые предоставляют дополнительную информацию.Вы можете найти примеры редукторов из этого руководства в этом репозитории GitHub, включая тесты. Здесь снова все вкратце:

    • Синтаксис: По сути функция редуктора выражается как (состояние, действие) => newState .
    • Неизменяемость: Состояние никогда не изменяется напрямую. Вместо этого редуктор всегда создает новое состояние.
    • Переходы состояний: Редуктор может иметь условные переходы состояний.
    • Действие: Обычный объект действия поставляется с обязательным свойством типа и необязательной полезной нагрузкой:
      • Свойство типа выбирает условный переход состояния.
      • Полезные данные действия предоставляют информацию для перехода между состояниями.

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

    Редукторы · ReduxKotlin

    Редукторы определяют, как состояние приложения изменяется в ответ на отправленные действия в магазин. Помните, что действия описывают только то, что произошло , но не описывают, как состояние приложения меняется.

    Проектирование государственной формы

    В Redux все состояние приложения хранится как единый объект.Хорошая идея — подумать об этом shape перед написанием любого кода. Каково минимальное представление состояния вашего приложения как объекта?

    Для нашего приложения todo мы хотим хранить две разные вещи:

    • Текущий выбранный фильтр видимости.
    • Актуальный список задач.

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

      класс данных AppState (
        val visibilityFilter: VisibilityFilters = VisibilityFilters.ПОКАЗАТЬ ВСЕ,
        val todos: List  = listOf (
            Todo (text = "Рассмотрите возможность использования Redux",
                завершено = истина),
            Todo (text = "Хранить все состояния в одном дереве",
                завершено = ложь)
        )
    )
      
    Записка о взаимоотношениях

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

    Действия по обработке

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

      typealias Reducer <Состояние> = (состояние: Состояние, действие: Любое) -> Состояние
      

    Существует как минимум 2 способа определения редукторов:

    1. функции
      fun reducer (состояние: AppState, действие: Any): AppState {
       
       вернуть newAppState
    }
      
    1. функциональных объектов -TODO формулировка правильная?
      редуктор val: Reducer  = {состояние, действие ->
        
        newAppState
    }
      

    Это называется редуктором, потому что это тип функции, которой вы передадите Массив.уменьшить (операция: (согласно: S, T) -> S) . Очень важно, чтобы редуктор оставался чистым. То, что никогда не следует делать внутри редуктора:

    • Преобразовать аргументы;
    • Выполнять побочные эффекты, такие как вызовы API и переходы маршрутизации;
    • Вызов нечистых функций, например Date.now () или Math.random () .

    Мы рассмотрим, как выполнять побочные эффекты в расширенном пошаговом руководстве. Для теперь просто помните, что редуктор должен быть чистым. Учитывая те же аргументы, он должен вычислить следующее состояние и вернуть его. Без сюрпризов. Никаких побочных эффектов. Никаких вызовов API. Никаких мутаций. Просто расчет.

    Разобравшись с этим, давайте начнем писать наш редуктор, постепенно обучая его понимать действия, которые мы определили ранее.

    Начнем с определения начального состояния. Начальное состояние можно определить несколькими способами. в В приведенном выше примере мы предоставили значения по умолчанию конструктору AppState , так что их можно использовать.Другой Метод заключается в использовании val в сопутствующем объекте AppState .

    Примечание отличия от JS Redux

    JS Redux позволяет инициализировать хранилище без предварительно загруженного состояния, опуская preloadedState параметр из функции createStore . ReduxKotlin требует, чтобы предварительно загруженное состояние было передано в createStore . Это позволяет нам использовать для State тип, не допускающий значения NULL.

      val store = createThreadSafeStore (редуктор, INITIAL_STATE)
      

    Теперь займемся SET_VISIBILITY_FILTER .Все, что нужно сделать, это изменить visibilityFilter на штат. Легко:

     
    fun todosReducer (состояние: AppState, действие: Любое) =
        when (действие) {
            это SetVisibilityFilter -> state.copy (visibilityFilter = action.visibilityFilter)
            иначе -> состояние
        }
      

    Обратите внимание:

    1. Мы не изменяем состояние . Мы создаем копию с помощью функции copy для классов данных. Новый объекты состояния могут быть созданы с помощью конструктора класса State, но копия как правило, это удобный способ изменить только часть состояния.

    2. Мы возвращаем предыдущее состояние в случае else . Важно вернуть предыдущий состояние для любого неизвестного действия.

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

    Обработка дополнительных действий

    Нам нужно выполнить еще два действия! Как и в случае с SetVisibilityFilter , мы расширим наши возможности. Редуктор для ручки AddTodo .

      весело todosReducer (состояние: AppState, действие: Любое) =
        when (действие) {
            это SetVisibilityFilter -> state.copy (visibilityFilter = action.visibilityFilter)
            это AddTodo -> state.copy (todos = state.todos.plus (
                            Делать(
                                text = action.text,
                                завершено = ложь
                                )
                            ))
            иначе -> состояние
        }
      

    Как и раньше, мы никогда не пишем напрямую в состояние или его поля, а вместо этого возвращаем новое объекты.Новое задание совпадает со старым заданием , объединенным с одним новым элементом в конце. Новое задание было построено с использованием данных из действия.

    Наконец, реализация обработчика ToggleTodo не должна стать полной неожиданностью:

      - ToggleTodo -> state.mapIndexed {index, todo ->
                if (index == action.index) {
                    todo.copy (завершено =! todo.completed)
                } еще {
                    делать
                }
            }
      
    Примечание по наименованию редуктора

    В JS Redux полезно называть функции-редукторы тем же именем, что и поле состояния, которое они будут дескриптор из-за функций JS, которые позволяют функции combReducers назначать редукторы полям.Например:

      const todoApp = combReducers ({
      visibilityFilter,
      todos
    })
      

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

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

    Переходники для колки

    Вот наш код на данный момент. Это довольно многословно:

      весело todosReducer (состояние: AppState, действие: Любое) =
        when (действие) {
            это SetVisibilityFilter -> state.copy (visibilityFilter = action.visibilityFilter)
            это AddTodo -> state.copy (todos = state.todos.plus (
                            Делать(
                                текст = действие.текст,
                                завершено = ложь
                                )
                            ))
            это ToggleTodo -> state.copy (
                    todos = state.todos.mapIndexed {todo, index ->
                        if (index == action.index) {
                            todo.copy (завершено =! todo.completed)
                        } еще {
                            делать
                        }
                    }
                )
            иначе -> состояние
        }
      

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

    Есть способ облегчить понимание? Похоже, что todos и visibilityFilter обновлялся полностью самостоятельно. Иногда поля состояний зависят друг от друга и более. требуется рассмотрение, но в нашем случае мы можем легко разделить обновление todos на отдельный функция:

      весело todosReducer (состояние: Список , действие: Любое) =
        when (действие) {
            это AddTodo -> state.plus (
                            Делать(
                                текст = действие.текст,
                                завершено = ложь
                                )
                            )
            это ToggleTodo -> state.mapIndexed {todo, index ->
                        if (index == action.index) {
                            todo.copy (завершено =! todo.completed)
                        } еще {
                            делать
                        }
                    }
            иначе -> состояние
        }
      

    Обратите внимание, что todosReducer также принимает состояние , но состояние является списком! Теперь todoReducer дает todos — это всего лишь кусочек состояния, которым нужно управлять, а todosReducer знает, как обновить только этот фрагмент. Это называется составом редуктора , и это фундаментальный образец построения приложений Redux.

      весело visibilityFilterReducer (состояние: VisibilityFilter, действие: Любое): VisibilityFilter =
        when (действие) {
            это SetVisibilityFilter -> action.visibilityFilter
            иначе -> состояние
        }
      

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

      fun todosReducer (состояние: List , action: Any): List  =
        when (действие) {
            это AddTodo -> state.plus (
                            Делать(
                                text = action.text,
                                завершено = ложь
                                )
                            )
            это ToggleTodo -> state.mapIndexed {todo, index ->
                        if (index == action.index) {
                            todo.copy (выполнено =! todo.завершенный)
                        } еще {
                            делать
                        }
                    }
            иначе -> состояние
        }
    
    весело visibilityFilterReducer (состояние: VisibilityFilter, действие: Любое): VisibilityFilter =
        when (действие) {
            это SetVisibilityFilter -> action.visibilityFilter
            иначе -> состояние
        }
        
    весело rootReducer (состояние: AppState, действие: Any) = AppState (
        todos = todosReducer (state.todos, действие),
        visibilityFilter = visibilityFilterReducer (состояние.visibilityFilter, действие)
    )
      

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

    Это уже хорошо выглядит! Когда приложение больше, мы можем разделить редукторы на отдельные файлы. и сохранять их полностью независимыми и управлять разными доменами данных.

    Примечание по комбинированному шаблону редуктора

    Ручная разводка редукторов требует некоторого количества шаблонов.Одна альтернатива Паттер для ReduxKotlin использует интерфейс Reducible. Как делятся редукторы — решать вам и ваша команда, и рекомендуется, чтобы это было единообразно на протяжении всего проекта. В Комбайн JS Redux Reducers значительно облегчит этот шаблон, однако с помощью статического набрал Kotlin, что функция не может быть легко реализована. Есть возможность использования сгенерированный код и аннотации, чтобы помочь в этой области.

    ReduxKotlin имеет функцию combReducers , однако он объединяет только те же редукторы. государственный тип.Он довольно ограничен по сравнению с комбайном JS Reducers .

    Следующие шаги

    Далее мы рассмотрим, как создать хранилище Redux, которое хранит состояние и заботится о вызов вашего редуктора при отправке действия.

    Один крутой трюк для упрощения функций редуктора | Эрик Эллиотт | JavaScript Scene

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

    Чистая функция — это функция, которая:

    1. При одинаковых аргументах всегда возвращает один и тот же результат, а
    2. не имеет побочных эффектов (например, не изменяет свои входные аргументы).

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

    Решение — удобный инструмент под названием Immer. В этом видео я познакомлю вас с Immer и покажу, как его использовать, чтобы упростить код редуктора.С одним или двумя небольшими редукторами разница довольно тонкая, но в большом проекте она может значительно упростить код вашего приложения.

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

    Обратите внимание на то, что мы возвращаем из случая like.type : смешивание битов полезной нагрузки во вложенное свойство объекта состояния с использованием синтаксиса распространения объекта JavaScript: .... состояние и ... состояние. в строках 19–25.

    После погружения вы можете упростить эту часть до однострочного (строка 21):

    Функция создания возвращает частичное приложение (функция, которая была частично применена к своим аргументам), которая затем принимает аргументы функция редуктора. Вы передаете ему функцию обратного вызова, которая принимает черновик объекта состояния вместо реального объекта состояния. Вы можете изменять этот объект, как если бы это был любой другой изменяемый объект в JavaScript.Больше не нужно распространять вложенные свойства, чтобы избежать изменения входного аргумента.

    После запуска вашей функции обратного вызова Immer сравнивает черновик с исходным состоянием, а затем создает новый объект с примененными вашими изменениями, поэтому ваша функция выглядит так, как будто она видоизменяется, но по-прежнему ведет себя как чистая функция. Вы получаете лучшее из обоих миров: простоту мутации с преимуществами неизменности.

    EricElliottJS.com содержит подробные уроки по таким темам, как чистые функции, неизменяемость, частичные приложения и другие концепции функционального и объектно-ориентированного программирования.

    Подписывайтесь на YouTube.

    Краткое и кислое руководство по редукторам | Дэниел Меррилл | Async

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

    Для этого может потребоваться три обхода массива: сначала мы хотим уменьшить наше лимонное дерево до ведра спелых лимонов, затем мы пройдемся по этому ведру и наклеим на каждый лимон этикетку с указанием его веса, и, наконец, мы ‘ Я снова пройду через ведро и выброшу все лимоны весом менее трех унций.

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

    Что такое преобразователь?

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

    Помните наш редуктор keepRipeLemon с самого начала? В этом есть что-то особенное — в нем уже используется редуктор внутри редуктора! Обратите внимание, что он передает инструкции «что делать со спелыми лимонами» на номер putInBucket :

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

    Во-первых, давайте удостоверимся, что мы понимаем длинную версию, в которой мы вызываем сокращение один раз на каждом этапе процесса. Всего у нас четыре редуктора:

    • putInBucket : Инструкция по соединению лимона с ведром.
    • keepRipeLemon : Инструкции по проверке созревания лимона и его хранению, если это так.
    • labelLemonWeight : Инструкции по взвешиванию каждого лимона (случайное число от 0 до 12).Добавляет свойство веса нашему объекту лимона перед передачей его в putInBucket .
    • keepHeavyLemon : Инструкции по фильтрации слишком светлых лимонов.

    Обратите внимание, что все наши редукторы используют putInBucket в качестве инструкций «что делать дальше». Найдите желтый лимон? Положите в ведро. Сделали взвешивание и маркировку? Положите в ведро. (Найдите зеленый лимон? Отдайте ведро, ничего не делая).

    Единственная особенность putInBucket заключается в том, что он предоставляет специальные инструкции для по объединению лимона и ведра — bucket.толчок (лимон) . Он не полагается на какие-либо другие внешние инструкции для выполнения своей работы. Назовем такую ​​самодостаточную функцию «базовым редуктором».

    Но помните, что есть несколько способов комбинировать вещи — мы можем подсчитывать наши лимоны, а не собирать их в ведро. Мы сделаем наши редукторы гибкими, передав инструкции «что делать дальше» в качестве аргумента вместо жесткого кодирования putInBucket . Поскольку мы не уверены, будем ли мы подсчитывать или собирать лимоны, мы также переименуем наше ведро с накоплением в с общим итогом .

    В итоге мы получаем функцию, которая принимает nextInstructions в качестве аргумента и возвращает редуктор:

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

    В приведенном выше примере keepRipeLemon первоначально ожидает инструкций о том, что делать дальше , если лимон проходит тест на спелость. Когда мы вызываем эту функцию с этими инструкциями, нам возвращается функция со знакомой сигнатурой редуктора: (acc, cur) => newAcc

    Теперь мы можем загрузить keepRipeLemon с нашим базовым редуктором putInBucket , если захотим. наши следующие инструкции — положить спелые лимоны в ведро:

     const keepRipeLemonsInBucket = keepRipeLemon (putInBucket) 

    Или, если мы хотим подсчитать, сколько у нас спелых лимонов, мы могли бы вместо этого загрузить его с помощью нашего редуктора подсчета :

     const tallyRipeLemons = keepRipeLemon (tallyLemonColor) 

    Когда мы сокращаем наше лимонное дерево, мы получаем тот же результат, что и при использовании жестко запрограммированных редукторов:

     lemonTree.reduce (keepRipeLemonsInBucket, []) // [{color: 'yellow'}, {color: 'yellow'}, {color: 'yellow'}] 
    lemonTree.reduce (tallyRipeLemons, {green: 0, yellow: 0} ) // {green: 0, yellow: 3}

    Наше значение initialValue для keepRipeLemonsInBucket является пустым массивом, а значение initialValue для tallyRipeLemons является пустым листом подсчета. Мы должны учитывать, какой тип накопления ожидает наш базовый редуктор: putInBucket ожидает массив корзины, а tallyLemonColor ожидает объект таблицы подсчета.

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

    Изготовление мега-редуктора

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

    Давайте модифицируем все наши существующие редукторы в новую составную форму:

    Наши данные теперь будут проходить через каждого из этих редукторов и будут обработаны следующим редуктором в цепочке перед возвратом. Наш nextInstructions может быть базовым редуктором, если мы хотим обновить аккумулятор сразу, ИЛИ наш nextInstructions может быть еще одним из этих новых составных преобразователей. Оба принимают runningTotal и лимон в качестве входных данных, и оба возвращают новый аккумулятор, поэтому нам не нужно различать их.

    Теперь мы можем создавать произвольно длинные цепочки инструкций, если в конце цепочки вызывается базовый редуктор!

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

    Давайте уменьшим:

    Отлично! Теперь мы можем составлять вместе функции преобразователя. Изначально мы хотели «коробку спелых желтых лимонов с этикеткой по весу, из которой удалены все лимоны с недостаточным весом.«Давайте сделаем это.

    Каждый новый редуктор получает свою nextInstructions , передаваемую при его создании:

    Мы можем собрать наш редуктор в отдельные шаги (верхний пример) или создать все за один раз (внизу)

    Готово! Мы сократили наше лимонное дерево до коробки спелых лимонов, помеченных по весу, без лимонов с недостаточным весом. И всего за одну поездку через массив LemonTree !

    На один уровень глубже: общий «фильтр»

    Вы могли заметить, что keepRipeLemon и keepHeavyLemon следуют одному и тому же базовому шаблону.Мы возвращаем результат вызова nextInstructions , только если текущий лимон проходит некоторую проверку. В противном случае мы просто возвращаем текущую промежуточную сумму, не изменяя ее. Это довольно хороший признак того, что мы можем выделить этот test как отдельный шаг и сделать наш composable-reducer-creator еще более универсальным и полезным:

    Это становится довольно абстрактным. На самом деле, мне все еще трудно визуализировать точный путь через редуктор отсюда (что является одной из причин, по которой я пишу этот пост!).Давайте проследим, что происходит:

    Наша filterInstructions сначала ожидает функцию тестера под названием test , которая возвращает true или false в зависимости от лимона, который мы ему передаем. Если test (лимон) возвращает истинное значение, мы установим newRunningTotal как результат следующего шага в инструкциях. Если тест (лимон) является ложным, newRunningTotal останется текущим runningTotal .

    Возврат текущего runningTotal без вызова nextInstructions эквивалентен тому, чтобы сказать «вот ваше ведро назад» или «вот ваше ведомое итоговое значение», не изменяя его.

    «Я держу только желтые лимоны, но вы дали мне зеленый, так что вот ваше пустое ведро обратно»

    Когда мы передаем нашу функцию test в filterInstructions , нам возвращается функция, которая принимает nextInstructions Редуктор в качестве аргумента, который будет , либо будет базовым редуктором , либо еще одним из наших специальных редукторов.Как только мы предоставим nextInstructions , нам наконец-то будет возвращена функция со стандартной сигнатурой редуктора.

    Эта функция теперь «загружена» тестом способности currentValue и передачей дальнейшей обработки nextInstructions , если тест пройден.

    Общая «карта»

    Мы можем проделать аналогичный процесс для извлечения логики «взвешивания и маркировки» из нашего редуктора веса weightLemon . Преобразование значения путем передачи его через какую-либо функцию и фиксации результата называется «сопоставлением», поэтому мы назовем эту функцию mapInstructions :

    И снова давайте пройдемся по шагам.Наша функция mapInstructions сначала ожидает mapperFn . Мы создадим функцию сопоставления, которая преобразует лимон в этикетку с указанием веса. Как только мы передаем ему mapperFn , возвращается другая функция, которая ожидает nextInstructions в качестве аргумента. Мы будем использовать наш верный старый putInBucket . Наконец, мы готовы к сокращению.

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

    Тот же результат: спелые, тяжелые, меченые лимоны в ведре.Но гораздо больше многоразового использования!

    Сокращение состояния Redux

    Прежде чем мы расстанемся, давайте кратко рассмотрим Redux, поскольку это, вероятно, место, где мы столкнемся с редукторами в действии. Управление состоянием в редукторе Redux ничем не отличается от уменьшения в нашем лимонном дереве. Мы предоставляем инструкции по объединению аккумулятора (состояние нашего хранилища redux) и текущего действия (объект со свойством типа ). Значение, которое мы возвращаем , станет новым состоянием хранилища и будет использоваться в качестве аккумулятора при следующем вызове редуктора.Редукторы

    Redux часто используют оператор switch , чтобы определить, каким инструкциям следует следовать:

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

    Редукторы варьируются от «мертвенно-простых» до «невероятно трудных для визуализации», особенно когда композиция входит в изображение. Постарайтесь помнить, что редуктор — это не что иное, как инструкции по объединению двух вещей: текущего результата и текущего значения.

    И еще, как же я пропустил весь этот пост, не превратив свое лимонное дерево в лимонад ?? Покажи мне, как ты это сделал, в комментариях!

    Примечания:

    • Я не говорил о «чистых функциях», но они важны для получения ожидаемых результатов и являются основой функционального программирования. Узнай о них!
    • Ознакомьтесь с Kyle Simpsons Functional Light Javascript и этим уроком Egghead.io для более глубокого обсуждения преобразователей и других концепций функционального программирования.

    Вы можете использовать их без Redux

    Райан Юрканин

    Фото Сорайи Ирвинг на Unsplash

    TL; DR: Вы можете обрабатывать состояние с помощью редуктора в компонентах класса, имея одну функцию, которая переводит действия в изменения состояния. Он централизует все ваши setStates.

    ? Что такое редуктор?

    Редукторы — это функции, которые принимают входные данные и решают, что с ними делать, в одном центральном месте. Вот и все. ?

    Если у вас есть функция, которая определяет отображаемое представление на основе URL-адреса, это редуктор.

    Redux Reducers ™ ️ — это конкретное использование редукторов, которые интерпретируют события в вашем приложении и то, как это меняет состояние приложения.

    this.dispatch («RESET_COUNT_CLICKED»)

    Если вы не знакомы с Redux, приведенный выше пример обычно запускается путем вызова функции dispatch с действием (объект, описывающий событие). ?

    Мы можем использовать редукторы прямо сейчас в компоненте класса, создав функцию, которая обрабатывает установку состояния с помощью типа действия, например:

    Использование редуктора в этом простом примере, на мой взгляд, является излишним.Я рад, что React собирается предоставить по этой причине хуки useState и useReducer .

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

    Поскольку Redux помещает все свое состояние в один объект, который быстро растет, он идеально подходит для шаблона редуктора. Из Redux можно удалить редукторы, даже если мы потеряем массу замечательных функций.

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

    Вместо передачи функции dispatch давайте передадим функцию update , которая работает как setState .

    ? Создание худшей версии Redux

    Когда вы вызываете update, вы говорите, как именно должно измениться состояние inline.Это может быть или не быть рядом с другими аналогичными изменениями состояния.

    При достаточно маленьком состоянии это действительно приятно и лаконично. Если бы у нас было 5 или более компонентов, изменяющих несколько свойств состояния, было бы трудно найти источник ошибок. ? ?

    Даже не меняя redux, вы можете эмулировать этот паттерн. Действия диспетчеризации, которые выглядят как SET_COUNT , намекают, что нам действительно просто нужен setState . Это легко сделать.

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

    ? Редукторы полезны не только для состояния.
    Здесь вводится текущий URL, а на выходе — представление! Редукторы

    — отличный способ разместить решения. Если вы раньше работали с response-router-4, то приведенный выше код должен показаться вам довольно знакомым.

    Благодаря компоненту /> мы можем размещать эти редукторы просмотра маршрута где угодно.

    Теперь, если у кого-то есть вопрос: «Какими способами URL может изменять то, что отрисовывается», у него есть одно центральное место для поиска.

    ? Подводя итог
    1. Редукторы как шаблон существуют вне Redux и Javascript и просты в реализации. У них одна единственная ответственность - принимать вход и выдавать результат.
    2. Редукторы Redux переводят события приложения в состояние. Для этого вам не нужен Redux, вы можете сделать это с локальным состоянием компонента.
    3. Редукторы упрощают организацию и поиск различных вариантов того, что может происходить в коде, и полезны по мере роста приложений.

    Если у вас есть какие-либо вопросы или вы ищете индивидуального наставничества в React, не стесняйтесь писать мне в Твиттере @yurkaninryan в любое время!

    Если вам нравится мой стиль письма, вот еще несколько моих статей.

    Редуктор Redux похож на кофеварку | Адхити Равичандран

    Мне нравится думать о Reducer в Redux как о «кофеварке». Он принимает старое состояние и действие и подает новое состояние (свежий кофе).

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

    Что такое редуктор? И как мне написать редуктор, не запутавшись?

    Мне нравится думать о редукторе как о «кофеварка ».Кофеварка всасывает кофейный порошок и воду. Затем он возвращает чашку свежезаваренного кофе, которым мы можем наслаждаться. По этой аналогии редукторы - это функции, которые принимают текущее состояние (кофейный порошок) и действия (вода) и заваривают новое состояние (свежий кофе).

    Редукторы - это чистые функции , которые принимают состояние и действие и возвращают новое состояние.

     function (state, action) => newState 

    Редуктор всегда должен следовать следующим правилам:

    «Учитывая набор входных данных, он всегда должен возвращать один и тот же результат.Никаких сюрпризов, никаких побочных эффектов. Никаких вызовов API. Никаких мутаций ».

    Что такое чистые функции ?? Разве все хорошо написанные функции не чисты?

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

    1. Функция всегда возвращает один и тот же результат, если переданы одинаковые аргументы.
    2. Функция не вызывает никаких побочных эффектов.

    В прошлом мы все писали чистые функции сознательно или неосознанно.

    Взгляните на чистую функцию ниже, которая возвращает сумму двух чисел с двумя входными аргументами.

     function sumOfNumbers (a, b) {
    return a + b;
    }

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

    Теперь поговорим о втором требовании о побочных эффектах.

    Побочные эффекты возникают всякий раз, когда ваша функция взаимодействует с внешним миром.

    Вот некоторые примеры общих побочных эффектов:

    • Выполнение вызова API
    • Изменение данных
    • Журналы консоли на экране
    • Манипулирование DOM
    • Date.now () для получения текущей даты и времени
    • async вызовы await / ожидание обещаний для разрешения

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

    Как только мы поймем, что такое чистая функция, мы все готовы приступить к написанию наших редукторов на redux.

    Мы должны помнить, что мы никогда не должны изменять состояние внутри редуктора, и это может быть достигнуто с помощью оператора Object.assign () или последней версии Object Spread (…) .

    Никогда не изменять состояние, всегда возвращать новую копию состояния.

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

    Оператор распространения объекта концептуально аналогичен оператору расширения массива ES6.

    Давайте рассмотрим пример, в котором вы собираетесь оценивать это сообщение в блоге. Наш редуктор примет старое состояние и действие. Действие здесь - RATE_BLOG_POST . Метод редуктора blogDetails () примет текущее состояние и действие в качестве параметров и вернет новое состояние. Снова вспомните аналогию с кофеваркой!

     // Редуктор 
    function blogDetails (state = initialState, action) {switch (action.type) {case RATE_BLOG_POST: return {
    ... state, rating: action.rate
    } default: return state
    }}

    В приведенном выше примере мы всегда будем возвращать новую копию состояния. Оператор распространения (…) гарантирует, что в функции-редукторе нет мутаций состояния.

    Это намного проще и читаемее, чем использование метода Object.assign () .

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

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

    Написание чистых редукторов приводит к коду, который легко поддерживать, тестировать и отлаживать.

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

    Конечно, писать чистые чистые функции можно, даже если вы не используете redux. Но тот факт, что когда мы используем redux в сложных приложениях для управления состоянием, соблюдение этих принципов - это потрясающе.

    Redux следует принципу единого хранилища, чтобы поддерживать одно неизменное хранилище. Но это позволяет иметь несколько редукторов. По мере того, как ваше приложение начнет расти, у вас будет несколько редукторов, разделенных по функциям.

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *