Автор оригинала: Thomas Greco.
Понимание результатов с чистыми компонентами
Использование функциональных компонентов без гражданства (A.k.a. «Чистые» или «тупые» компоненты) в Rect.js продолжает расти, поскольку сначала он был выпущен в Rect 0.14, и по причинам. Опираясь на чистые компоненты, разработчики в конечном итоге пишут многоразовый код, который чрезвычайно прост в тесте, что приводит к лучшему архитектуре приложения. Почему? Функциональный компонент без природы является просто заводской функцией, используемой для создания реагирования. Лично мне нравится термин «чистый компонент», потому что это указывает на то, что действительно код – чистая функция, посыпанная некоторыми JSX.
«Чистая функция – это функция, которая: учитывая тот же вход, всегда будет возвращать один и тот же выход. Дает никаких побочных эффектов. Полагается на отсутствие внешнего музного состояния».
– Эрик Эллиотт, Мастер интервью JavaScript: Что такое чистая функция
Оснащен правильным количеством тестов, использование чистых функций может помочь привлечь душевное спокойствие разработчикам путем обеспечения того, чтобы любой сценарий, который был протестирован, не имеет непреднамеренного результата в приложении. Как вы можете себе представить, это может пройти долгий путь при создании крупных приложений. Он также не должен прийти как неудивительно, что чистые функции – это сердце redux, которое опирается на javaScript’s Уменьшить
функция.
В предстоящем посте я буду в дальнейшем подробнее о том, как уменьшить работу. На данный момент я хочу продолжить представление с идеей записи «пуленепроницаемых» компонентов реагирования с использованием чистых функций. Чтобы наилучшим образом проиллюстрировать это, я собираюсь показать какой-то код, который показывает ADT React Compont.
// Post.js const Post = ({ postStyles, content }) =>;{content}
Чистая природа этих компонентов делает крайне легко рассуждать по поводу кода. В этом случае мы видим, что Пост
это просто функция, которая берет postststles
и Содержание
как реквизит, а затем использует их для создания элемента. Вы можете увидеть реквизит
передается в качестве параметра, но я использовал ES6 Разрушение Отказ При этом мы можем вытащить определенные значения из реквизит
Объект и доступ ropps.poststyles
и ropps.Content
без использования точечная запись Отказ
Лично я думаю, что это круто, потому что он удаляет любую тайну о реквизит
быть переданным в компонент. В программировании тайна никогда не бывает хорошей, поэтому это позволяет нам читать код быстрее, чем другие, и позволяет нам лучше рассуждать с ними, особенно как компоненты становятся более сложными!
Почему это важно
Хотя этот компонент может не выглядеть так много, это может очень хорошо воспроизвести неотъемлемую часть приложения. Например, давайте представим
Оказание статей для сайта, который имеет более миллиона ежедневных пользователей. Если это так, то мы, скорее всего, будем хотеть эти меньшие, сплоченные блоки кода, поскольку они позволяют нам легко выбивать каждую последнюю деталь!
Вы также найдете, что чистые компоненты делают модификации Breeze, а также привести к записи кода, который можно легко перенести в другие проекты. В дополнение к этим преимуществам чистые компоненты также делают крайне легко для проверки кода с любыми сумасшедшими реквизитами, которые вы хотите. Как и чистая функция, чистые компоненты всегда будут отображать один и тот же вход к тому же выводу, поэтому Если мы можем подумать о сценарии, мы можем проверить, как наш компонент будет реагировать Отказ
Погружение в тесты на единицу
Как мы только что увидели, код для функциональных компонентов предоставляет нам потрясающий Intel для всего, что нам нужно знать, чтобы написать эффективные тесты. Чтобы наилучшим образом проиллюстрировать это, я собираюсь взять вас через блок код ниже, который является тестом устройства
составная часть.
// Post.test.js import test from 'tape'; import dom from 'cheerio'; import Post from './Post'; import { renderToStaticMarkup } from 'react-dom'; test('', assert => { const msg = 'should render a post with a title and content'; // define pre-exisiting conditions const contentText = 'I am the content of the blog post. Lorem ipsum I need sum now!'; const props = { postStyles: 'post', content: contentText }; const checkProps = new RegExp(contentText, 'g'); const el = const $ = dom.load(render(el)); const output = $('.post').html(); const actual = checkProps.test(output); const expected = true; assert.same(actual, expected, same); assert.end() })
Не волнуйтесь, если код выше, кажется, немного запутанному вам – все будет вскоре смысл.
Шаг 1 – Настройка ранее существовавших условий
В этом случае мы знаем, что
берет Название
и а Содержание
PROP, чтобы мы могли проверить это, просто пройденные в эти значения для реквизит
Переменная. Как только мы назначили реквизиты, которые мы хотим проверить, мы можем использовать JavaScript’s Regex
Функция для создания другой переменной, CheckProps
Отказ
Первоначально статья была неправильно использующей Regexp. Функция, в результате чего, в результате чего тесты дают ложные срабатывания, но он был обновлен с тех пор!
// post.test.js const contentText = 'I am the content of the blog post. Lorem ipsum I need sum now!'; const props = { postStyles: 'post', content: contentText }; const checkProps = new RegExp(contentText, 'g');
Наши модульные тесты должны Проверьте один кусок компонента на каждое испытательное утверждение , который в этом случае это Содержание
пропры В частности, мы видим CheckProps
Создание для поиска через строку, чтобы убедиться, что она содержит строку, назначенную в CondentText
Отказ
Шаг 2 – Визуализация HTML с помощью Cheerio
После этого мы видим использование Cheerio для оказания нашего компонента. Cheerio Позволяет нам пройти и манипулировать DOM, используя его API. Кроме того, Cheerio молниена быстро и в результате этого он в самом сердце популярных библиотек, таких как фермент Отказ
Посмотрите на наш код, мы видим, что Cheerio’s . Нажмите
Способ сделать наш реактивный элемент. Оттуда мы можем просто пройти в селекторе содержимого, которое мы хотим проверить. В нашем случае это строка пост
Поэтому мы используем .class
Селектор используется для захвата этой порты кода. Наконец, мы потом увидимся .html ()
Способ, который будет представлять собой содержимое от нашего селектора и позволит нам проверить на наш компонент.
// Set up cheerio const el =const $ = dom.load(render(el)); const output = $('.post').html();
Шаг 3 – Проверьте реквизиты
Последнее, что нам нужно сделать, это проверить реквизиты нашего Выход
Переменная против нашего метода проверки проверки. Для этого мы создаем фактический
Значение путем тестирования вывода против ожидаемого значения, которое в этом случае является правда
Отказ
const actual = checkProps.test(output); const expected = true; // asserts that actual and expected are equal assert.same(actual, expected, msg); // ends assertion test assert.end();
Если это так, это означает фактический
значение вернет правда
И дайте нам проходящий тест!
Шаг 4 – Праздновать (последние слова)
Потрясающие! Вы доверяли это до конца. Надеюсь, теперь вы получите хорошее понимание того, как работают функциональные компоненты без гражданства в реакции. Лично я не могу насытиться из них, и я вряд ли когда-нибудь пытаюсь использовать классы в моем коде. Зачем использовать это
Если вам не нужно?
Если у вас есть какие-либо вопросы и комментарии, оставьте комментарий ниже!