Варианты рендеринга с JSX

В React есть несколько способов вывести список элементов. Наиболее популярный знаком, пожалуй, всем: использовать map.

import React from 'react';
import moment from 'moment';

const week = [0, 1, 2, 3, 4, 5, 6];

const renderWeekDays = locale =>
  week.map((day, i) => {
    const weekDay = moment().locale(locale).weekday(day).format('dd');

    return (
      <li
        key={`weekday-${weekDay}`}
        style={[styles.weekDay, (i === 5 || i === 6) && styles.weekDayWeekend]}
      >
        {weekDay.toUpperCase()}
      </li>
    );
  })
;

const CalendarStrip = ({ locale }) => <ul>{renderWeekDays(locale)}</ul>;

export { CalendarStrip };

Если принять во внимание, что при рендеринге вызывается функция, понимаем: можно изменять её как угодно, лишь бы она возвращала валидные JSX-элементы. Вот как выглядит обычный for вместо map:

const renderWeekDays = locale => {
  const week = [];

  for (let i = 0; i <= 6; i += 1) {
    const weekDay = moment().locale(locale).weekday(i).format('dd');

    week.push(
      <li
        key={`weekday-${weekDay}`}
        style={[styles.weekDay, (i === 5 || i === 6) && styles.weekDayWeekend]}
      >
        {weekDay.toUpperCase()}
      </li>,
    );
  }

  return week;
};

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

const dynamicComponent = isCorrect ? <ComponentOne /> : <ComponentTwo />;

В противном случае более читаемым код будет с оператором &&. Это доказывает пример со стилизацией компонента в зависимости от переданных ему props.

import React from 'react';
import { StyleSheet, TouchableOpacity } from 'react-native';

const styles = StyleSheet.create({
  // какие-нибудь стили
  wrapper: {...},
  round: {...},
  shadow: {...},
});

const Button = ({
  color,
  round,
  shadowed,
  children,
  onPress
}) => (
  <TouchableOpacity
    style={[
      styles.wrapper,
      { color },
      !!round && styles.round,
      !!shadowed && styles.shadow,
    ]}
    onPress={onPress}
  >
    {children}
  </TouchableOpacity>
);

export { Button };

// в дальнейшем используется как:
// <Button round color="#D3474B">
//   <Text>Hello</Text>
// </Button>

Да, здесь есть страшный и нечитаемый для многих оператор двойного отрицания !!. Исключительно для примера, чтобы показать его полезность в некоторых случаях и вообще напомнить о его существовании. !! принудительно приводит то, к чему его применили, к логическому типу — вот его польза. По сути это тоже самое, что Boolean(value), только короче. Страшен и нечитаем он лишь по незнанию. Применять или нет — вопрос стайлгайда конкретной компании, но в чужом коде встретиться такое может.