• Почему profit равен "1"?

    bingo347
    @bingo347 Куратор тега JavaScript
    Ищу TypeScript разработчика
    Пройдите свой код по шагам и сразу увидите, что keys - пустой массив
    А reduce на пустом массиве просто возвращает init значение, даже не заходя в колбэк
    Ответ написан
    Комментировать
  • Почему требует установить в зависимость 'dispatch'?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Потому, что вы используете этот метод внутри useEffect.
    Добавьте метод к зависимостям
    React.useEffect(() => {
        dispatch(setTotal(notes.length))
      }, [notes, dispatch])
    Ответ написан
    4 комментария
  • Зачем useRef нужен объект?

    @twolegs
    Это нужно для того, чтобы сохранять ссылку на сам ref-объект.
    То есть `useRef` всегда возвращает ссылку на один и тот же объект.
    Таким образом становится возможно использовать его без лишних апдейтов в том же useEffect.
    Ответ написан
    3 комментария
  • Почему timerRef равен 6?

    @Konf
    Редактирую ответы на 2 + 2 по 4 раза
    Вызов setTimeout, как и setInterval, возвращает идентификатор таймера, который можно использовать для отмены (отключения) выполнения функции после таймера с помощью clearTimeout(id) - для setTimeoutи clearIntervalдля setInterval

    Подробнее

    Почему именно 6?
    В браузерах идентификаторы таймеров - числовые, уникальные для каждого таймера, и идут по порядку начиная с 1. Это значит что до таймера под номером 6 какими-то скриптами было запущено ещё 5 интервалов/таймеров.
    Ответ написан
    3 комментария
  • Как работает state и setState изнутри?

    w13vitaliy
    @w13vitaliy
    self-taught developer since 2020
    setState работает следуещем способом:
    принимает на вход функцию возвращающее новое состояние или новое состояние. Так как state - это объект тогда он делает следуещее:

    // ... - spread оператор
    state = {...state, ...newState} // так как newState идет после state тогда он перепишет все старые значения на новые или добавит новые

    https://learn.javascript.ru/rest-parameters-spread...
    Ответ написан
    2 комментария
  • Как это понять?

    theobroma
    @theobroma
    javascript developer (ReactJS)
    1)let arr = str.split(' ');
    Возьмет строку, в данном случае 'aa bb cc aa bb aa', разобьет на части используя пробел как разделитель. В результате получим:
    let arr = ['aa', 'bb', 'cc', ' aa', 'bb', 'aa']
    2) Следующий кусок кода просто произведет подсчет одинаковых частей.
    return arr.reduce((acc, rec, index) => {
        return (typeof acc[rec] !== 'undefined')
          ? { ...acc, [rec]: acc[rec] + 1 }
          : { ...acc, [rec]: 1 }
      }, {});
    Рассмотрим его подробнее. Начнем с аргументов:
    acc – последний результат вызова функции, он же «промежуточный результат».
    rec – текущий элемент массива, элементы перебираются по очереди слева-направо.
    index – номер текущего элемента.

    Что собственно происходит:
    -typeof acc[rec] !== 'undefined' проверит есть ли в объекте 'acc' ключ 'rec'.
    - и если мы уже встречали такой( например когда "aa", но уже во второй раз ), тогда изменить значение этого ключа прибавив 1.{ ...acc, [rec]: acc[rec] + 1 }
    - если же такого ключа еще не было, то создадим его со значением 1, ибо он в первый раз попался{ ...acc, [rec]: 1 }
    Ответ написан
    6 комментариев
  • Как это понять?

    Seasle
    @Seasle
    \( ゚ヮ゚)/
    Допустим у Вас есть компонент, который при появлении на странице (монтировании) добавляет глобальную прослушку события, например - mousemove. Приложение работает, всё хорошо, но потом, по некоторой причине, происходит размонтирование и через некоторое время снова монтирование. В таком случае, если не удалить прослушку, будет уже 2 события, что и является утечкой памяти.
    Также происходит таймерами и интервалами, поэтому надо отменять их при размонтировании.
    Как пример, советую посмотреть это видео.
    Ответ написан
    1 комментарий
  • Где найти такие сайты?

    @Eitanzubu
    В интернете посмотри
    Ответ написан
    1 комментарий
  • Почему не ищет цифру 66?

    @dodo512
    /\d+(?=\s)(?=\s10usd)/

    /\d+(?=\s10usd)/
    Ответ написан
    Комментировать
  • Почему данные не отсылаются на сервер?

    Seasle
    @Seasle Куратор тега JavaScript
    \( ゚ヮ゚)/
    PHP лучше работает с объектом типа FormData. Просто преобразуйте свой объект в него. И заголовок можно убрать.
    const formData = new FormData();
    for (const key in obj) {
        formData.append(key, obj[key]);
    }
    ...
    xhr.send(formData);

    В том случае, если сервер не будет получать данные, можете попробовать добавить следующий код:
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    А ещё можно воспользоваться fetch.
    Ответ написан
    4 комментария
  • Какие методы отправки http запросов сейчас наиболее современные, актуальные?

    E1ON
    @E1ON Куратор тега JavaScript
    web, gamedev, anime, science
    Ответ написан
    Комментировать
  • Какие методы отправки http запросов сейчас наиболее современные, актуальные?

    KulakovAngel
    @KulakovAngel
    Full Stack Developer (Node.JS)
    Если Вы находитесь на стадии обучения основам JS/front-end, вначале изучите XMLHttpRequest и технологию HTTP (основы). На основе него создана промис-обертка (гораздо удобнее в реальном использовании) - Fetch. Но и это еще не конец.

    В реальной разработке часто используют готовые решения, упрощающие решение. Например, для разработки клиента часто используют React, Vue, Angular и др.. Для управления состоянием приложения - Redux, MobX и др.. Так вот, хорошая библиотека для выполнения запросов - это Axios. Чем она лучше Fetch? Во-первых, самостоятельно парсит тело ответа (например, в/из JSON), отправляет необходимые заголовки. Сравните:
    fetch('https://jsonplaceholder.typicode.com/users')
        .then(res => res.json())
        .then(users => dispatch(addUsers(users)));
    
    axios('https://jsonplaceholder.typicode.com/users')
        .then(users => dispatch(addUsers(users)));

    Также axios добавляет много полезностей - заголовки ответа вместе с телом в одном объекте, выброс исключения при ошибочных кодах состояния ответа сервера, кастомизация, несколько экземпляров и прочее, хотя, скорее всего, это все Вы изучите и поймете позже.

    Стоит понимать разницу между AJAX, XMLHttpRequest, Fetch, Axios.
    • AJAX - технология опроса сервера без перезагрузки (противовес ей - отправка данных кнопкой submit или ссылкой "a href="""). Чаще всего сегодня данными сервер и клиент обменивается через JSON
    • jQuery.ajax() - метод библиотеки jQuery, обертка над XMLHttpRequest. Т.е. библиотека.
    • XMLHttpRequest - объект браузера (BOM), позволяющий отправлять запросы к серверу, т.е. реализация упомянутой в первом пункте технологии AJAX
    • Fetch - более современный метод, использующий промисы. Более удобен, но под капотом используется XMLHttpRequest, естественно.
    • Axios - одна из библиотек (т.е. ее нужно подключать, как, например, тот же jQuery), наверное, самая распространенная, еще более упрощающая реальную разработку.


    Изучайте архитектуру на React (или др. фрэймворке), и увидите насколько проще использовать axios.
    Ответ написан
    2 комментария
  • Правильно ли я выстроил Promise?

    Aetae
    @Aetae
    Тлен
    Технически правильно, но база программирования - вынесение повторяющихся действий в функции, условно как-то так:
    function wait(delay) {
      let promise;
      const fn = function(result) {
        return promise || (promise = new Promise(resolve => setTimeout(resolve, delay, result)));
      };
      fn.then = resolve => fn().then(resolve); // использование функции как thennable
      return fn;
    }
    
    const req = wait(2000)
    .then(() => {
      console.log('Подготовка данных...');
    
      const data = {
        name: 'Personal computer',
        model: 'MSI',
        price: 120000,
        weightKG: 10,
      };
    
      return data;
    })
    .then(wait(2000))
    .then(data => {
      console.log('Обработка данных...');
      data.status = 'order';
      data.discount = '20%';
      data.price -= 120000 * parseInt(data.discount, 10) / 100;
    
      return data;
    })
    .then(wait(2000))
    .then(data => {
      console.log('Выписка чека...');
      data.check = `№${Math.floor(Math.random() * 100000000)}`;
    
      return data;
    })
    .then(wait(2000))
    .then(data => {
      console.log(`Данные получены:
    1.Наименование: ${data.name}
    2.Модель: ${data.model}
    3.Цена: ${data.price}
    4.Вес: ${data.weightKG}
    5.Статус: ${data.status}
    6.Скидка: ${data.discount}
    7.Чек: ${data.check}`);
    })
    .then(wait(2000))
    .then(() => {
      console.log('...:::С новым годом!:::...');
    });

    Понятно что у вас там не просто setTimeout, ну так и выносить можно что угодно.)
    Ответ написан
    6 комментариев
  • Как .then вызывается от объекта?

    Lynn
    @Lynn
    nginx, js, css
    .then всегда возвращает promise. Если функция внутри then вернула не promise, то этот ответ просто заворачивается в Promise.resolve
    Ответ написан
    1 комментарий
  • Как понять этот скрипт?

    @tukreb
    Вы погулилте для начала.

    Рекурсия начнёт возвращать результат тогда, когда дойдёт до самого конца и результаты начнёт возвращаться с самого конца. Отсюда и получается, что отправили 5, но выводить началось с 1, потому что return, до этого не работал, он вызывал функцию myFun, а возвращаться результат начал, когда сработал этот if if (n === 1) return 1;, в котором уже не вызывается myFun и соответственно заканчивается рекурсия и return начинает возвращать ответ.
    Ответ написан
    1 комментарий
  • Что перспективнее изучать Java или Kotlin?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    На данный момент можно уже изучать котлин без джавы. Это вполне самостоятельный язык. Под капотом на Андроиде джава-машина и немного джавовых типов, это можно раскурить отдельно, когда будешь уверенно знать хоть что-то.

    История про изучать одновременно не один язык - странная. Я уверен на 100%, что товарищи из других ответов так не делали. И делать так - глупо.
    Ответ написан
    7 комментариев
  • Можно ли решить данную задачу, зная основы JS?

    GavriKos
    @GavriKos
    Можно. Задача не на знание языка, а на алгоритмизацию и логическое мышление.

    P.S. можно даже математически решить, на самом деле
    Ответ написан
    Комментировать
  • Можно ли решить данную задачу, зная основы JS?

    alex4answ
    @alex4answ
    не понял суть задачи, но можно, можно все, что вы можете "описать на бумаге"
    Ответ написан
    Комментировать
  • Какие книги помогут стать Junior на JS?

    @Rerurk
    Google + огромное желание
    Ответ написан
    Комментировать
  • Какие книги помогут стать Junior на JS?

    makssof
    @makssof
    Web-разработчик
    Добавлю ко всему вышесказанному:
    Есть ещё полезные списки, гуглить "awesome [thingname]"
    Например "awesome js":
    https://github.com/sindresorhus/awesome
    https://github.com/sorrycc/awesome-javascript

    А можно вообще считерить и загуглить "awesome awesomeness":
    https://github.com/bayandin/awesome-awesomeness
    https://awesomeopensource.com/
    Ответ написан
    Комментировать