• Изучение фронтэнда/JS?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    и просьба не писать негативные комментарии, поскольку итак в упадке духа и гружусь на эту тему.

    Но все же, советую определиться с целью обучения программированию. Если чисто ради денег, а не ради интереса, то вероятнее всего, вы будете очередным "вайтишником". Если у вас уже есть работа, можно не спеша все осваивать без всяких менторов и курсов. Например прочитайте Чарльза Петцольда Код. Тайный язык информатики, это книга поможет понять, что вообще такое код.
    Курсы почти всегда бесполезны, они дадут вам ложное чувство понимания программирования. Самое важное в этой профессии, уметь учиться самому, иначе дальше не потяните. А время изучения основ, самый лучший момент также прокачивать навыки самообучения. Помните, не будет курсов для мидлов-сеньеров, и когда вы пройдете курсы для новичков, дальше вам все также будет непонятно, куда двигаться и как учить. Поэтому советую на легком этапе, пробовать сделать все самой.
    Через пол-года/год активного обучения, попробуйте устроится на работу в команду, это ускорит дальнейший процесс обучения.
    Ответ написан
    3 комментария
  • Поиск элементов массива по подстроке с 0 символа?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    filterElements = (elements, filter) => {
            return elements  = elements.filter((el) => {
                return el.charAt(0).toLowerCase() === filter.trim().toLowerCase();
            });
        }

    Возможно я неправильно понял. Вы имеете ввиду, не поиск по первой букве, а поиск с нулевого символа и дальше? т.е. поиск элементов, которые начинаются с указанного слова? Тогда вот так
    filterElements = (elements, filter) => {
            return elements  = elements.filter((el) => {
                return el.toLowerCase().startsWith(filter.trim().toLowerCase());
            });
        }

    если нужна поддержка ie<12, то вместо startsWith пишите indexOf(filter.trim().toLowerCase()) === 0
    Ответ написан
    1 комментарий
  • Как использовать map с async/await?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Что значит "не промисы, а async/await"? - async/await это тоже промисы.

    Используйте await Promise.all, например:

    const result = await Promise.all([ 1, 2, 3 ].map((n, i) => {
      return new Promise(resolve => {
        setTimeout(() => {
          console.log(`timeout #${i}`);
          resolve(n * 10);
        }, Math.random() * 3000 | 0);
      });
    }));
    
    console.log('result:', result);
    Ответ написан
    2 комментария
  • Как заменить свойство объекта внутри объекта state?

    sharpfellow
    @sharpfellow
    Front
    Надо переписать объект sms

    someFunction = () => {
          const {sms} = this.state;
          sms.disabled = true;
          this.setState({sms});
    }

    Таким образом вы обновите поле disabled в sms
    --------
    Или еще так
    someFunction = () => {
          this.setState({sms: {...this.state.sms, disabled: true}});
    }

    --------
    еще так можно
    someFunction = () => {
          this.setState(prevState=>({sms: {...prevState.sms, disabled: true}}));
    }

    Последний вариант самый устойчивый к коллизиям, связанным с изменением стейта в других места программы
    Ответ написан
    1 комментарий
  • Почему действия в цикле работают через раз?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что вы удаляете элементы из перебираемого массива.
    Например:
    Массив [a, b, c, d]
    Цикл 0: (i==0) удалить element[a], удалить a. В итоге массив [b, c, d]. Увеличить i на 1.
    Цикл 1: (i==1) i указывает на c. Удалить element[c], удалить c. В итоге массив [b, d]. i++
    Цикл 2: не выполняется, т.к. i >= length
    Итог: b и d мы просто пропустили.
    Ответ написан
    1 комментарий
  • Хранение сессии React, Firebase. Как организовать?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    вот авторизация из живого проекта

    const logInWithLoagInAndPassword = (login, password, organization, rememberMe) => {
        return dispatch => {
            return fetch(BASE_URL + '?username=' + login + '&password=' + password + '&customer=' + organization + '&remember=' + remember + '&login=Inloggen&ajax=1', {
                method: 'GET',
                headers: {
                    "Access-Control-Allow-Origin": "*"
                }
            }).then(response => {
                return response.json();
            }).then(json => {
                    if (rememberMe) {
                        localStorage.setItem('sessionid', json.sessionid)
                        localStorage.setItem('auth', JSON.stringify(json))
                    } else {
                        //clear localstorage
                    }
                    dispatch({type: AUTH_SUCCESS, payload: json})
                }
            )
    
    
                .catch(error => {
                    console.error('error', error)
                    dispatch({type: AUTH_ERROR, payload: error})
                });
        }
    }

    как видите мы после авторизации получаем ответ от сервера в котором есть id сессии который мы и ложим в  localstorage. Дальше при переходе человека на этот же сайт стоит проверка если есть в localstorage id сессии кидаем его на главную если нет то на авторизацию.
    Ответ написан
    4 комментария
  • Хранение сессии React, Firebase. Как организовать?

    aryutin
    @aryutin
    Простой способ, который приходит на ум это хранение в localstorage данных типа:
    - isAuth: true/false

    Так делать не надо, потому что злоумышленик может поставить этот флаг по своему усмотрению (хоть в данном случае это ему ничего и не даст).

    а так же уникальный id, который отдает Firebase:
    uid: NcefVvDqfHXqrj0IlvzfmLb2

    Можно хранить в localstorage только уникальный id и по нему "дергать" информацию. Если id валидный - отдавать контент. Если идентификатор не валидный, отправлять {'status':'unathorized'} и отправлять логинится.

    А лучше конечно использовать JWT.
    Ответ написан
    1 комментарий
  • Простым языком о замыканиях?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. Для чего замыкание существуют?
    Для инкапсуляции данных.
    В ООП есть модификаторы доступа (private, protected), которые закрывают доступ к данным извне класса, но позволяют обращаться к ним из методов.
    В ФП для этой задачи используют замыкания, закрывая данные внутри функции. Из вне данные недоступны, но вложенные функции имеют к ним доступ.

    2. В каких условиях они создаются?
    Когда вложенная функция обращается к переменным внешней функции.

    Хоть и просили без примеров, но на примере показать проще:
    // makeCounter - внешняя функция
    function makeCounter(initialValue) {
      var value = +initialValue || 0;
      // counter - внутренняя функция
      // она использует переменную value из внешней функции
      // что-бы это было возможным, для counter создается замыкание,
      // в котором хранится переменная value
      // переменная initialValue функции counter не нужна, поэтому ее можно "забыть"
      return function counter() {
        return value++;
      };
    }
    
    // у нас 3 экземпляра функции counter
    var counter1 = makeCounter();
    var counter2 = makeCounter();
    var counter3 = makeCounter(100);
    // и для каждой есть своя переменная value
    console.log(counter1()); // 0
    console.log(counter1()); // 1
    console.log(counter2()); // 0
    console.log(counter1()); // 2
    console.log(counter3()); // 100
    
    // а вот получить как-то напрямую переменную value мы не можем
    // инкапсуляция нам не дает поломать данные
    Ответ написан
    Комментировать
  • Что нужно иметь и знать в фреймворке 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 комментариев
  • Как вывести на страницу вложенные комментарии на React?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Вы в компоненте при вызове самого себя не передаете комментарий. Еще бы хорошо сделать так, чтобы вызов Comment происходил только при наличии комментариев. Да и в комменте вы один раз вызываете Comment, а не список комментов.
    Я бы сделал так. Создал компонент CommentList, в нем сделал вызов текущих комментов Comment в цикле. И в компоненте Comment сделал проверку на наличие комментов, если они есть, вызывал бы CommentList (передавая ему список комментов), тот в свое время опять циклом пройдет по комментам и вызовет компонент Comment, и.т.д.
    Ответ написан
    5 комментариев
  • В IE 11 не срабатывают margin top, bottom на flex-box?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Потому что явно не задана высота.
    Ответ написан
    8 комментариев
  • Как проверить, что знаешь на базовом уровне JavaScript?

    @JSmitty
    Хотите задачку? Ловите.

    Сделать на JS светофор основной (3 цвета) и связанный пешеходный (2 цвета) с кнопкой по запросу пешеходного перехода:
    1) основной включен на зеленый, пешеходный на красный
    2) по нажатию на запрос, через не менее чем 5 секунд на 5 секунд показывается желтый на основном, затем основной - красный, пешеходный зеленый на 15 секунд. После пешеходный на красный, основной сразу на зеленый.
    3) минимальное время зеленого на основном - 60 секунд. Если кнопка запроса перехода нажата ранее 60 секунд с момента включения зеленого - пункт 2 срабатывает через 60 секунд с момента включения зеленого.
    4) после нажатия запроса и до включения зеленого на основном светофоре, кнопка запроса игнорируется.

    Часть задачи - сделать отображение светофоров, и кнопку. Кнопка всегда доступна к нажатию (не ставим атрибут disabled). Другая часть - реализовать асинхронную логику. По возможности на чистом JS (не прибегая к библиотекам).
    Ответ написан
    7 комментариев
  • CSS и JS анимации, как освоить?

    abyrkov
    @abyrkov
    JavaScripter
    Что касается JS-анимации - то тут множество библиотек, самой популярной из которых является всем известный jQuery. Но интересно другое. В основе всех этих библиотек лежит один и тот же код, основанный на requstAnimationFrame. Он приблизительно таков:
    function animate(el, property, startVal, endVal, time, easing) {
      var start = Data.now();
      function reanimate(now) {
        var l = easing(time / (now - start));
        l = l > 1 ? 1 : l;
        el[property] = startVal + (endVal - startVal) * l;
        if(l < 1) requestAnimationFrame(reanimate);
      }
      requestAnimationFrame(reanimate);
    Ответ написан
    Комментировать
  • CSS и JS анимации, как освоить?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Просто начните пытаться реализовать свои идеи. Возникнут вопросы, найдете на них ответы. Так и научитесь.
    Со знанием базовых вещей будет проще конечно, но все равно прогресс чувствуется когда садишься и делаешь.

    По SVG:
    commons.oreilly.com/wiki/index.php/SVG_Essentials/...
    Книга по основам, я читал в более адекватном epub формате
    https://sarasoueidan.com/tags/svg/index.html
    Блог Сары (SVG, но можно и про CSS&JS почитать), более практичные и полезные вещи, читал с конца к началу

    По JS:
    https://classroom.udacity.com/courses/ud860/lesson...
    Это база для понимания "че оно лагает?"
    https://developers.google.com/web/tools/chrome-dev...
    Понимание возможностей DevTools, очень упрощает жизнь в перспективе
    https://github.com/getify/You-Dont-Know-JS
    И конечно знание самого JS всегда нелишнее

    По библиотекам и анимации:
    Сам codepen, понятное дело. Смотрите в чужой код, пытайтесь разобраться.
    https://www.youtube.com/playlist?list=PLkEZWD8wblt...
    Более-менее можно прочувствовать что такое GSAP вообще, неплохой начальный курс
    https://greensock.com/docs/#/HTML5/GSAP/TweenMax/from/
    Сама документация и туториалы на сайте, можно и на их youtube канале что-то подсмотреть.
    https://tympanus.net/codrops/
    Много полезного с примерами

    Всякого рода математика:
    https://www.youtube.com/playlist?list=PLRqwX-V7Uu6...
    https://www.youtube.com/user/codingmath/videos?flo...
    Можно залипнуть, чтобы понимать как все эти векторные фишки делаются на canvas

    Еще есть 3D, но это отдельная тема.
    Ответ написан
    1 комментарий
  • В MVC как соединить событие через View и добавление в Module?

    string15
    @string15
    Учусь верстать руками
    Ответ написан
    Комментировать
  • Как сделать эффекты как на сайте примере?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Что ж вас всех так тянет к этому канвасу? (риторический вопрос)

    1. Анимации буквы под ней фото. Как это делается? Подозреваю что canvas используется

    Если вы про большие "прозрачные" буквы, через которые видны фотографии, то никакой канвас там не нужен. Это делается на svg-масках - просто и производительно. Соответственно при перемещении мышки добавляется transform:translate для маски. Задача тривиальная, но оставлю пример для ознакомления. Переход между слайдами делается аналогично.

    2. Листание мышкой (зажимаешь появляются направляющие вверх-вниз, вправо-влево).

    На нажатие мышки вешаете обработчик, показывающий эти элементы (думаю не стоит говорить о том, как поменять им opacity). Далее точно так же - на событие "перетаскивания" добавляете transform:translate для всех этих линий и transform:scale для кружков. При переходе между слайдами добавляете еще больше трансформаций по вкусу.

    Остальные эффекты тоже интересуют. Понятно что css3, js, canvas

    Для рисования линий можно опять взять svg и..... Это вообще мощный прием, много куда его можно приткнуть. Появление надписей можно сделать на CSS-анимациях. Вариантов много, можно начать с вот этого примера (только делать все в обратную сторону) или поиграть с размерами псевдоэлементов, положенных поверх текстов. Еще там есть постраничный скролл, но это легко загуглить.
    Ответ написан
    5 комментариев
  • Необычный hover эффект?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Событие mousemove или onEnterFrame(),
    пересчитать прозрачность каждой точки, как квадрат расстояния от позиции мыши.

    Сделал пример на canvas.
    upd. добавил инертности/плавности перехода цветов.
    Ответ написан
    3 комментария
  • Почему не происходит замена?

    Строки в js неизменяемы по индексу. Лучше собирать новую строку.
    Ответ написан
    Комментировать