React cheatsheet или парочка лайфхаков

rbyj8so1ycvdgzasqfpslrpcme8.png

Поделюсь несколькими практиками, которые использую при создании React-компонентов. Заинтересованных прошу под кат.

Установка параметров по условию


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

Обычно в коде я встречаю что-то типа такого:

import React from 'react';

function Button({ size, skin, children }) {
  return (
    
  );
}


Её читабельность вроде бы сохранена, но что если у нас будет ещё больше состояний?

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

И так:

import React from 'react';
import classNames from 'classnames';

const SIZE_CLASSES = {
  small: 'button_size_small',
  medium: 'button_size_medium',
  large: 'button_size_large',
};
const SKIN_CLASSES = {
  accent: 'button_skin_accent',
  primary: 'button_skin_primary',
};

function Button({ size, skin, children }) {
  return (
    
  );
}


Для удобства присвоения классов я использую утилиту classnames.

Напишем напоследок ещё какой-нибудь пример.

import React from 'react';

const RESULT_IMAGES = {
  1: '/img/medal_gold.svg',
  2: '/img/medal_silver.svg',
  3: '/img/medal_bronze.svg',
};

function Result({ position }) {
  return (
    

Поздравляем! Вы на {position} месте!

); }


Установка тега по условию


Иногда возникает потребность выставлять тот или иной HTML-тег или React компонент при рендере в зависимости от условия. Для примера, конечно же, возьмём нашу любимую кнопку, потому что она прекрасно демонстрирует проблему. С точки зрения UI она обычно выглядит как кнопка, но внутри, исходя из ситуации, это может быть либо тег