• Какой необходимый уровень знаний для junior React.js Разработчика?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    UPDATE: реальные тестовые задания и разборы здесь, ответы на все вопросы из поста в моем блоге об обучении react.

    не включая основы js

    Извините, но стандартная задача, про "напишите функуцию add, которая при вызове add(1)(2) вернет 3" - многих положила на лопатки =) Поэтому будьте готовы..

    React
    0) Какую проблему решает react ?
    1) Мгновенно ли срабатывает setState? Если нет, то как выполнить код, который 100% выполнится после того, как новый state будет установлен?
    2) Зачем многие постоянно пишут в constructor: this.FUNCTION_NAME = this.FUNCTION_NAME.bind(this) и отсюда вопрос вытекает чему равно this в разных местах вашего компонента...
    3) в каких методах жизненого цикла стоит выполнять xhr запросы? В каких стоит "обновлять state на основе props"?
    4) Что будет если вызвать this.setState в render методе компонента?
    5) зачем нужен componenWIllUnmount, приведите пример..
    6) Контролируемые, не контролируемые компоненты
    7) Как организовать роутинг в реакт приложении? (ответ: взять react-router - подходит, но было бы круто, если бы вы рассказали, как он примерно работает)*
    8) Зачем нужны propTypes? Что происходит с ними в production сборке?
    9) Как можно удобно "отлаживать" чужой код приложения, написанного на react (намек в сторону React devtools)
    ...

    Redux
    0) Какую проблему решает redux?
    1) Зачем многие создают типы действий NAME_REQUEST / NAME_SUCCESS ? А заодно, что такое "действие", а что такое "создатель действия"...
    2) Что такое редьюсер? Можете написать простой редьюсер без react/redux?*
    3) Для чего нужен redux-thunk? Как он работает? Напишите (можно псевдокод) асинхронный создатель действия (либо, если надоело говорить "терминами" - асинхронный aciton)
    4) Как компоненты приложения получают "пропсы" из "стора"?*
    5) Можно ли (и считается ли это нормальным) использовать state, если используется Redux?
    6) Почему в reducer'ax мы возвращаем новые объекты? Приведите пример, когда вы возвращаете новый объект, а когда тот же самый.
    6.5) А так же, "как в js вообще это работает?". Например:
    let obj1 { name: 'Test', age: 100 }
    let obj2 = obj1
    obj2.name = 'Test_new'

    Что будет в obj1, почему? В каких случаях объекты могут быть равны?
    7) Что возвращает функция connect (из react-redux)?
    ...

    Общее:
    0) package.json
    1) Webpack, gulp, etc...
    2) node.js
    3) promise

    Что-нибудь практическое:
    1) Как бы вы валидировали форму, если ошибки валидации приходят после submit'a ее на сервер..
    2) Почему не работает следующий код, сделайте чтобы работало
    ...
    На истину не претендую, но такие вопросы имели место быть на собеседованиях. В беседе можно многое разузнать дополнительными вопросами и так далее. Так же, если часть вопросов вам неизвестна - не беда, многие и на половину ответить не могут.

    p.s. возможно дополню...
    p.p.s. звездочкой отметил, на мой взгляд не самые необходимые для junior-собеседования вопросы.
    Ответ написан
    31 комментарий
  • Как сделать табы без использования якорей?

    @karminski
    Senior React.JS Developer
    одного и того же id будет больше одного


    Мне кажется, у вас в архитектуре проекта что-то не ладное творится. Аттрибут ID у элементов по стандарту считается уникальным. Не стоит дублировать ID - и ваш вопрос сразу станет неуместным.
    Ответ написан
    Комментировать
  • Стоит ли использовать state, или все таки всегда хранить в redux store?

    mmmaaak
    @mmmaaak
    Много не кодил на редаксе, но видел в различных скринкастах, что стейт внутри компонентов используется чисто для управления UI внутри конкретного компонента, например флаги скрыть/показать для каких-либо блоков, или значения полей ввода, которые обновляются при событии change и испольуются в компоненте где-нибудь еще, не влияя на стейт приложения в store
    Ответ написан
    Комментировать
  • Почему не работает компонент React?

    miraage
    @miraage
    Старый прогер
    Общие косяки:

    1) Дублировать props в state - моветон. Используйте defaultValue на инпутах.
    2) Строковые рефы - моветон. И вообще, тут рефы не нужны - по изменению инпута нужно отдавать значение родителю через коллбэк, принятый в props

    По данному примеру

    1) Greeter в методе render не передает нужные props дочерним компонентам
    2) Внутри компонента формы храните состояние и передавайте его в props.onSubmit

    Небольшой оффтоп

    Вместо привязки контекста функции в конструкторе можно писать так:

    class Foo {
      onSubmit = (event) => {
        // "this" is correct instance
      };
    }
    Ответ написан
    6 комментариев
  • Как поставить 2 redux thunk на разные редюсеры?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Не совсем понял ваш вопрос, но thunk middleware никак не влияет на редьюсер.

    Redux-thunk - это всего лишь вспомогательная функция для ваших экшен-крейтеров (или просто экшенов, как удобнее). Если посмотреть на исходный код, то можно описать его так: если AC (экшен, экшен крейтор, создатель действия...) возвращает простой объект - прокидывай его дальше, если возвращает функцию, то "прокинь" в эту функцию dispatch и getState функции в качестве аргументов. Например, это дает нам возможность работать с асинхронными запросами. Так как, чтобы достучаться до reducer'a мы же должны использовать функцию dispatch. А если бы не было redux-thunk, то откуда бы она взялась у нас в коде экшена: импорта в файл нет, нигде не описано, что const dispatch = ...?

    Приведу пример:

    export function logout {
      return {
        type: LOGOUT_SUCCESS,
      }
    }


    AC возвращает простой объект, который (если нет других middleware влияющих на работу) - сразу попадает в reducer.

    export function login(data) {
      return dispatch => {
        dispatch({ type: LOGIN_REQUEST })
    
        return request.post(`${API_ROOT_V1}/auth/signin`)
          .send(data)
          .then(res => {
            if (!res.ok) {
              dispatch({ type: LOGIN_FAILURE })
              dispatch(showNotification({
                status: 'err',
                text: 'something going wrong',
              }))
    
            } else {
              dispatch({
                type: LOGIN_SUCCESS,
                data: res.body.data,
              })
              localStorage.setItem('cks_token', res.body.data)
              dispatch(push('/'))
            }
          }, err => {
            dispatch({ type: LOGIN_FAILURE })
            dispatch(showNotification({
              status: 'err',
              text: err.body && err.body.error || err.message,
            }))
          })
      }
    }


    Особое внимание на return dispatch => { - это значит, что АС возвращает функцию, а следовательно в этой функции из-за redux-thunk доступен dispatch. Если вводит в заблуждение ES2015 синтаксис, то это можно было бы написать как return function(dispatch) { ...

    P.S. Опишите подробнее, что вы имеете в виду под "А как разделить логику обработки?"
    Ответ написан
    Комментировать
  • Как быть с названиями классов?

    Если увидеть сам блок, то было бы легче.
    Дописывай к каждому элементу свой смысловой модификатор.
    На примере с кнопками:
    <button type="button" class="btn btn-default">
    <button type="button" class="btn btn-primary">
    <button type="button" class="btn btn-success">
    Ответ написан
    4 комментария
  • Почему этот блок не центрируется ровно?

    a13xsus
    @a13xsus
    Lazy developer
    position: relative; для .test1 укажите. Без этого зеленый прямоугольник цепляется к body.

    www.w3schools.com/cssref/pr_pos_top.asp
    For absolutely positioned elements, the top property sets the top edge of an element to a unit above/below the top edge of its nearest positioned ancestor. Note: If an absolute positioned element has no positioned ancestors, it uses the document body, and moves along with page scrolling. Note: A "positioned" element is one whose position is anything except static.

    Tip: A positioned element is an element with the position property set to: relative, absolute, or fixed.
    Ответ написан
    1 комментарий
  • Как можно переключить страницу исползуя React Router после получения данных?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Можете решить прелоадером. Пока нет данных - рисуете прелоадер (строку "загружаю...", часики, или что еще).
    Ответ написан
    1 комментарий
  • Как сделать мягкую анимацию увеличения элемента?

    sadisme
    @sadisme
    font-size:30rem
    У вас 0.1 секунда задана, какая она ещё может быть...

    transition: 1s linear
    Ответ написан
    Комментировать
  • Как понять такое поведение участка кода на js?

    impeee
    @impeee
    nodejs/erlang developer
    for (var i = 0; i < 10; i++) {
      setTimeout((function (i) {
        console.log(i); // ?
      })(i), 0);
    Ответ написан
    1 комментарий
  • Как сделать такой фон при помощи css?

    Это делается с помощью multi-gradient:
    background-image: -webkit-linear-gradient(45deg, transparent 48%, rgba(255, 255, 255, 0.1) 50%, transparent 52%), -webkit-linear-gradient(135deg, transparent 48%, rgba(255, 255, 255, 0.1) 50%, transparent 52%), url("../images/Wallpapers 1600x900.jpg");
        background-image: linear-gradient(45deg, transparent 48%, rgba(255, 255, 255, 0.1) 50%, transparent 52%), linear-gradient(-45deg, transparent 48%, rgba(255, 255, 255, 0.1) 50%, transparent 52%), url("../images/Wallpapers 1600x900.jpg");
        background-size: 2em 2em,
                         2em 2em,
                         100% 100%;


    Вот здесь можно про это прочесть:
    https://htmlacademy.ru/demos/8#step1
    Ответ написан
    Комментировать
  • Зачем в IT вакансиях требуют чувство юмора?

    Rou1997
    @Rou1997
    Да просто ищут подобных себе и имеющейся команде, ведь любые различия это потенциальный риск конфликтов (разногласий), да, развитие рождается только в конфликтах, но работодатели не хотят его, они еще со стартапа хотят наладить спокойную рутинную работу, чтобы "бабло капало" самотеком без всяких вмешательств с их стороны, и вот наконец у них это получилось, они лежат себе на шезлонге, в кресле, на диване, и вдруг приходите вы со своими различиями, и чтоб с вами общаться приходится, о ужас, усилия прилагать, все смеются а вы нет, сразу дискомфорт, конечно вы им такой не нужен, а уж если вы еще и какие-то новые идеи выдвигать будете, то сразу весь дружный коллектив встанет стеной, придумает 100 доводов против вас, и вас просто выгонят с треском. И все люди до единого именно такие, мозг человека это машина с ограниченным сроком службы (вернее с ресурсом, в том числе операций чтения-записи, склероз такую же природу имеет, только он более тяжелое заболевание), просто у кого-то раньше, у кого-то позже, у кого-то больше, а у кого-то меньше, и вакансии тоже чуть по-разному составляют.
    Ответ написан
    3 комментария
  • Кто как делает html формы?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Современная форма - это комплекс решений, в разных областях. И поставить один модуль который решит проблему - не возможно в принципе. Каждый специалист может собрать свою часть. Но без архитектора который скажет как это скрутить в кучу, будет велосипед с квадратными колесами - ехать можно но по специальной дороге.

    1. Разметка:
      • пишу всегда вручную;
      • длинные селекты тянутся из базы посредством шаблонизатора (например серверного TWIG);
      • прописываю полностью с атрибутами валидации HTML5 (благо все современные браузеры потдерживают);
      • выдумывать JS-велосипеды для валидации не стоит уже давно;
      • для зависимых полей пока есть простой js-клаcс сверяющий их.
      • drag&drop файлов давно уже работает без JS;
      • для подгрузки изображений в страницу на стороне клиента js-класс.

    2. Стили:
      • один раз прописаны стили для разных-форм на уровне тегов и взаимоотношений тегов (в итоге все формы на сайте виглядят в одном стиле);
      • класы только для самой формы, определяет как одна выводится: локально, модально или в теле контента;
      • кому сложно написать 300 строчек CSS, пользуйтесь фреймворками;
      • ни в коем случае не делайте стили форм для каждого раза как онные встречаются (придет дядя даст по рукам :) ).

    3. Отправка:
      • пользуйтесь action, submit и target;
      • нужны данные как модальное окно есть iframe;
      • ajax с формами не использую он изначально предназначен для другого:
        • для подгрузки полей в селектор, но только если селектор очень большой;
        • для поиска налету.


    4. Сервер:
      • использую специальный статический класс, который делает валидацию и XSS/injection-очистку;
      • как минимум PDO с подготовленными запросами;
      • Doctrine;

    5. База-данных:
      • наименования полей в базе соответствуют наименованиям полей в формах (с префиксом);

    Ответ написан
    1 комментарий
  • Как сделать такой скролл?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Куча свг, анимация которых привязана к текущему "прогрессу" (скроллу страницы). Такое например можно замутить с помощью GSAP Timeline, создаете таймлайн, запихиваете вагон всех возможных анимаций, грамотно расставленных на определенных этапах и потом меняете прогресс таймлайна относительно отношения позиции скролла к общей высоте скролла.

    Могу с уверенностью сказать что на создание этого сайта ушло много слез разработчиков и дизайнеров.
    Ответ написан
    Комментировать
  • Не корректно работает overflow: hidden при border-radius в сафари?

    teotlu
    @teotlu
    Навёрстываю упущенное
    Я на круговых элементах использую вдобавок к overflow: hidden маску изображения с круговым градиентом, замечательно работает:
    -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);
    Ответ написан
    1 комментарий