• Что нужно иметь и знать в фреймворке React джуну?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Хороший кандидат на должность Junior React Developer, по моему мнению, должен соответствовать следующему перечню требований:
    1. Хорошее знание JavaScript. В React разработке используется ES6 и большинство экспериментальных фич еще не вошедших в стандарт.
    2. Хорошее знание HTML и CSS. Кроссбраузерная верстка. Так же, хорошо иметь представление о том, что такое css-in-js.
    3. Web APIs. Умение работать с объектной моделью документа(DOM) и все эти XMLHttpRequest, localstorage, cookie, history и прочее.
    4. Хорошее знание API React. Вы должны хорошо знать React, знать его возможности, понимать основные концепции и уметь ответить на большинство типовых вопросов. Для этого достаточно хорошо изучить документацию, разобрать пару типовых проектов на github и попрактиковаться. Много полезной информации, приёмов и идей можно подчерпнуть из тематических статей и докладов. Так же, на просторах интернета можно найти подборки типовых вопросов, часто задаваемых на собеседованиях. В англоязычном сегменте их больше.
    5. Redux. Уверенное знание API. API библиотеки до боли пост. Знать, что такое промежуточное ПО и зачем оно. Понимать базовые концепции архитектуры Flux. Все это есть в документации и многочисленных курсах.
    6. Умение работать с менеджером пакетов npm на базовом уровне.
    7. Node.js. Хотя бы уметь написать простейший express/koa сервер, который будет отдавать ваше приложение и статику.
    8. Webpack. Базовые знания.
    9. Умение работать с git. Хотя бы знать и уметь примерять команды: init, clone, add, commit, push, pull, merge, checkout.
    10. Иммутабельность. Четкое понимание зачем это надо. Знание приемов иммутабельного изменения структур данных. Это есть в официальном туториале React.
    11. Статическая типизация TypeScrpt/Flow. Для начала хватит самых основ и способности понимать чужой код.
    12. Функциональное программирование. Хватит знаний полученных в процессе изучения JavaScript, а так же не помешает знать, что такое каррирование, чистые функции и рекурсия.
    13. Базовые концепции ООП. Хватит знаний полученных в рамках изучения JavaScript.
    14. Асинхронный код. Понимать как его правильно организовывать. Promise, async/await.
    15. Сетевые протоколы передачи данных. Вполне хватит базовых знаний о http/https, о том, что такое заголовки и какие они бывают. Хорошо знать о том, что такое websocket.
    16. За плечами должен быть хотя бы один учебный проект на React. Хватит типового тестового задания.
    Примеры таких заданий: 1, 2, 3(сайт может быть не доступен на территории РФ, советую отрыть через VPN и посмотреть), 4, 5. Если подобного проекта у вас нет, то будьте готовы, что потенциальный работодатель предложит вам выполнить тестовое задание и только по его результату вас, может быть, пригласят на техническое интервью. Если напишите хорошо, вас скорей всего пригласят.
    17. Желателен опыт создания типовых UI элементов. Например, чтобы не вызывало трудностей написать простой кастомный чекбокс. Куча примеров реализаций типовых элементов есть на codepen.

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

    Похожий вопрос.
    Ответ написан
    18 комментариев
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

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

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • Как изменить порядок выполнения actions в Redux?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Но почему-то, при загрузке компонента Artobjects, первым из actions вызывается getArtObjects, а потом уже loadUser. Из-за этого, action getArtObjects не может получить данные о юзера из глобального стейта, тк. появляются они позже.

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

    Такие важные для всего приложения данные, как данные пользователя, лучше начинать загружать как можно раньше. И это можно делать до монтирования корневого компонента:
    const store = configureStore();
    
    store.dispatch(clientInit());  // тут
    
    const Root = () => (
      <Provider store={store}>
        <Router>
          <App />
        </Router>
      </Provider>
    );

    А до получения этих данных вы можете показывать прелоадер и монтировать Artobjects только после их получения.
    {isInitialDataFetching ? <Preloader /> :  this.renderContent()}
    Ответ написан
    Комментировать
  • Как изогнуть input?

    @vanyamba-electronics
    <script language="JavaScript">
    function setMyTextValue() {
     myTextValue = "bla-bla-bla";
    }
    </script>
    <form>
        <input type="hidden" name="myTextValue" />
        <svg onChange="setMyTextValue()">
    </form>

    Примеры можно найти здесь.
    Ответ написан
    Комментировать
  • Как максимально анонимизировать сервер с сайтом?

    CityCat4
    @CityCat4 Куратор тега Сетевое администрирование
    Внимание! Изменился адрес почты!
    регать нужно на паспорт дропа

    руцентр будет очень рад забрать Ваши денежки - а потом забрать обратно домен по причине фейковых данных :)

    "Несите ваши денежки..." (С)

    Лучше вообще никакой паспорт не указывать - меньше будет подозрений

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

    JFYI: Размещать в зоне .ru сервер, на котором предполагается нечто противозаконное - IMHO просто глупость. руцентр запросто заберет домен как только терки начнутся. Запросит паспорт или еще что и пока не предоставите, домен заблокирует. Вы думаете, просто так что ли всяческие либерасты и иже с ними держат сайты в других зонах?
    Ответ написан
    Комментировать
  • Как изогнуть input?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    Хотелось бы сделать из этой палки изогнутую палку

    Боюсь спросить на сколько изогнутую, как пример не?
    https://jsfiddle.net/vtLn0596/1/
    Ответ написан
    10 комментариев
  • Как оптимизировать проверку на уникальность ID?

    kruglikdenis
    @kruglikdenis
    Full-stack web developer
    Можете повесить уникальный индекс на поле и убрать данную проверку:
    CREATE UNIQUE INDEX ident
    ON main_db (ident);


    Так же в качестве id можете использовать не то поле, которые вы получили при парсе, а какое либо свое
    и генерировать его как uuid 4: https://en.wikipedia.org/wiki/Universally_unique_i...
    вот библиотека для генерации uuid: https://github.com/ramsey/uuid
    Ответ написан
    Комментировать
  • Как перемешать QuerySet в Django?

    sim3x
    @sim3x
    https://docs.djangoproject.com/en/2.0/ref/models/q...

    Note: order_by('?') queries may be expensive and slow, depending on the database backend you’re using.
    Ответ написан
    5 комментариев
  • Как сделать flex-box'ы кросс-браузерными?

    Проверь возможность использования flexbox на этом сайте CIU
    Ответ написан
    Комментировать
  • Как сделать flex-box'ы кросс-браузерными?

    Kublyakov
    @Kublyakov
    Проблема точно не в этом коде. Этот код будет работать на 5 андроиде без проблем.
    Ответ написан
    2 комментария
  • Как скрыть JS код от посетителей, зашедших с Яндекс поиска?

    @sanshung
    1С-Битрикс программист
    Можно определить что это бот и не показывать для него.
    Как проверить, что робот принадлежит Яндексу
    Ответ написан
    Комментировать
  • Как реализовано сокрытие фотографий в Instagram?

    amux
    @amux
    alp.ac
    Никак не реализовано :) Просто нужно внимательней смотреть в код.
    3c050628c784433eb6355759bbe405c3.png
    Ответ написан
    Комментировать
  • Существует ли обработчик GET запросов в NODE.js?

    evgeniy2194
    @evgeniy2194
    PHP, js developer
    Комментировать
  • Как сделать навигацию по странице с помощью css id?

    LenovoId
    @LenovoId
    svg, css,js
    anchor , он же якорь
    в любом поисковике ищите по : прокрутка до якоря
    Ответ написан
    Комментировать