• Прокомментируете тестовое на react?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Хотелось бы видеть в проекте использование redux. react+redux - это самый распространенный и востребованный стек в React разработке.

    2. Почему все хандлеры и состояния находятся в App, а не в Main? Как вы потом эту кашу собираетесь масштабировать? Переносите все, что связанно только с Main в Main. По-хорошему смотрите пункт 1.

    3. Слишком много функциональных компонентов. Подумайте их где можно заменить на классы с реализованным shouldComponentUpdate или на PureComponent, чтобы убрать лишние вызовы render этих компонентов.

    4. import Logo from 'images/Logo.png';
    называть пути к ресурсам с заглавной буквы неправильно.

    5. Вместо:
    const StyledLogo = styled.img.attrs({
      src: Logo,
      alt: 'Aviasales'
    })`
      width: 60px;
      height: 61px;
    `;

    Удобней в использовании:
    const StyledLogo = styled.img`
      width: 60px;
      height: 61px;
    `;

    и:
    <StyledLogo src={logo} alt="Aviasales" />

    6.
    const Error = ({ text }) => (
      <StyledError dangerouslySetInnerHTML={{__html: text}} />
    );

    зачем тут html?
    Для сохранения переносов строки есть css правило:
    white-space: pre-line;

    7. Вместо:
    let element;
    
    if (error && !isLoading) {
      element = <Error text={error} />;
    }
    if (!error && isLoading) {
      element = <Loader />;
    }
    if (!error && !isLoading) {
      element = (
        <>
        <Heading />
        <Main
        isCurrencyExchanging={isCurrencyExchanging}
        activeCurrency={activeCurrency}
        handleCurrencyChange={this.handleCurrencyChange}
        ticketsFilteredByStops={ticketsFilteredByStops}
        stops={stops}
        handleStopsChange={this.handleStopsChange}
        handleUncheckOther={this.handleUncheckOther}
        />
        </>
      );
    }
    return element;

    Лучше:
    if (isLoading) return <Loader />;
    
    if (error) return <Error text={error} />;
    
    return (
      <>
        <Heading />
        <Main
          isCurrencyExchanging={isCurrencyExchanging}
          activeCurrency={activeCurrency}
          handleCurrencyChange={this.handleCurrencyChange}
          ticketsFilteredByStops={ticketsFilteredByStops}
          stops={stops}
          handleStopsChange={this.handleStopsChange}
          handleUncheckOther={this.handleUncheckOther}
        />
      </>
    );


    8. Вместо:
    filterTickets = (tickets, stops) => {
      return tickets.filter((ticket) => {
        return values(stops).indexOf(ticket.stops) !== -1;
      });
    };

    Лучше:
    filterTickets = (tickets, stops) => tickets.filter(
      ticket => values(stops).includes(ticket.stops),
    );


    9. Не пропускайте отступы между методами и между вложенными свойствами css.

    10. Вместо:
    componentsDidMount() {
      // много кода
    }


    Лучше:
    componentsDidMount() {
      this.fetchSomeData();
    }


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

    12. Loader и Error самое место в директории components/core или что-то вроде того. Там же, по-хорошему, должны находиться базовые компоненты: кнопки, инпуты, табы, чекбоксы.

    13. Styled компоненты, имхо, лучше писать в файле с компонентом, где они применяются. Так анализ кода происходит гораздо быстрей и легче поддерживать. Исключение - переиспользуемые компоненты.
    Даже если вам больше нравится выносить, называть файл style неправильно, вы там описываете компоненты, а не просто стили.
    Ответ написан
    3 комментария
  • Что думаете о курсах от Яндекса по Data Science?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Для начала, перед тем как отдавать квартальную зп среднего жителя РФ за курсы пойми, а понравится ли тебе это. Я знаю достаточно случаев когда человек начинал заниматься кодом, потом оказывалось это не его. Нравится ли тебе реально математика? Прочитай Перельмана, узнай о основных мат. понятиях в IT и в частности в DS. Математика может на деле показаться не такой классной как о ней говорят. А понравится ли тебе код-то писать? Были ли у тебя случаи когда ты не можешь решить задачу часов 50-60. У многих уже через 3 часа работы над один багом опускаются руки, а такие задачи появляться будут.

    Ну а о курсах в принципе у меня есть что сказать. В частности о яндексе: смотрел я что такое Яндекс лицей, так там ребята год синтаксис изучают, для меня это пустая трата времени. Что там по платным не знаю и готов поставить свой завтрак, что никто здесь их не проходил, а вот ту мы переходим к еще одной проблеме курсов вообще. Проводил я, значит, последнюю неделю собеседования. Искали себе юниор девелопера. Процентов 30 из соискателей оказались "Жертвами курсов", хочу заметить, ходили они на оффлайн курсы, у них был реальный наставник. Так парниша, например, через 3 месяца обучения сказал, что он не знает что такое const, зачем он нужен и вообще, им в школе сказали, что нужно всегда использовать let, а почему не сказали. Другая дамочка не смогла объяснить что такое асинхронность, хотя она уже прошла подобные оффлайн курсы. Оба проходили платные курсы. Мое мнение сложилось такое: курсы что онлайн, что оффлайн готовят низкоквалифицированных специалистов, которые что такое программирование знают в общих чертах. И не нужно считать, что если Яндекс, то качественно. Программирование - специфическая область, предполагающая самообразование, на курсах же груз ответственности за свое обучение ты скалываешь на организаторов.
    И, пожалуйста, не говорите, что яндекс ради людей старается. Он так же как и гикбрэинс и другие недоконторки пытается поднять бабла на хайпе.
    Ответ написан
    4 комментария