• Какая нижняя планка для изучения React?

    black1277
    @black1277
    Вольный стрелок
    Нужны желание и мотивация. Изучайте прямо сейчас. Делайте много маленьких и простых приложений, чтобы усвоить основы и понять концепции этого фреймворка. Опыт будет накапливаться, в том числе и на чистом js. Если всё время откладывать и чего-то ждать - не заметите как "поезд уедет".
    Ответ написан
    1 комментарий
  • Возникла проблема с js?

    Geminix
    @Geminix
    Фуллстек nuxt, .net разработчик
    так не работает?
    setTimeout(( ) => wrap_error_ajax( ) , 5000);
    Ответ написан
    Комментировать
  • Почему не работает функция?

    Rst0
    @Rst0
    .src вернет полную ссылку, а сопоставляете с короткой
    /*  event.target.src = 'https://site.com/img/basket.svg'  */
    if (event.target.src == 'img/basket.svg') {  // <--  вы проверяете
    Ответ написан
    1 комментарий
  • Как сделать чтобы рандом всегда давал новые значения?

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

    Совсем чуть-чуть заморочиться, и можно сделать, чтобы гарантированно никогда не шло одно и то же "случайное" значение два раза подряд.
    // random order in-place
    const shuffle = array => {
      for (let i = array.length - 1; i > 0; i--) {
        let j = Math.floor(Math.random() * (i + 1)); // random index from 0 to i
        [array[i], array[j]] = [array[j], array[i]];
      }
    };
    
    // init
    let coinIndex = -1;
    
    const button = document.querySelector('.button');
    button.addEventListener('click', () => {
      if (coinIndex < 0) {
        shuffle(coinFlip);
        coinIndex = coinFlip.length - 1;
      }
      console.log(coinFlip[coinIndex]);
      coinIndex--;
    });
    Ответ написан
    2 комментария
  • Выводиться в консоль [WDS] Live Reloading enabled.?

    @qwazimord
    Интроверт
    А не надо ничего убирать. Это только в режиме разработки. Если раздражает снимите галочку в консоли Предупреждения или Инфо, оставьте только Ошибки.
    Ответ написан
    Комментировать
  • Как сделать вход в аккаунт?

    Комментировать
  • Как вставить данные из массива в таблицу?

    0xD34F
    @0xD34F Куратор тега React
    const data = Object.entries(сюда кидаете свои данные);
    
    const years = Array
      .from(new Set(data.flatMap(n => Object.keys(n[1].G))))
      .sort((a, b) => a - b);
    
    const columns = Array
      .from(new Set(data.flatMap(n => Object.values(n[1].G).flatMap(Object.keys))))
      .sort();

    <TableHead>
      <TableRow>
        <TableCell rowSpan={2}>regions</TableCell>
        {years.map(n => <TableCell colSpan={columns.length}>{n}</TableCell>)}
      </TableRow>
      <TableRow>
        {years.flatMap(n => columns.map(m => <TableCell>{m}</TableCell>))}
      </TableRow>
    </TableHead>
    <TableBody>
      {data.map(([ region, { G } ]) => (
        <TableRow>
          <TableCell>{region}</TableCell>
          {years.flatMap(n => columns.map(m => <TableCell>{G[n]?.[m]?.value ?? 0}</TableCell>))}
        </TableRow>
      ))}
    </TableBody>
    Ответ написан
    1 комментарий
  • Как работать с foreign key sqlite3 через python, нигде понятного объяснения не нашёл?

    Vindicar
    @Vindicar
    RTFM!
    Питон тут нипричем. Читаем доки по sqlite, находим пример:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    CREATE TABLE track(
      trackid     INTEGER,
      trackname   TEXT, 
      trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE
    );

    Пример обеспечивает каскадное обновление ключа (ты вроде это просишь).
    Также может потребоваться включить поддержку внешних ключей, выполнив первым делом запрос:
    PRAGMA foreign_keys = ON;
    Ответ написан
    Комментировать
  • Как при включении одного муз.файла выключать другой?

    black1277
    @black1277
    Вольный стрелок
    Вот так можно, к примеру
    <body>
    <p>Название</p>
    <audio src='audio/Dich.mp3' controls audioplay></audio>
    <p>Название</p>
    <audio src='audio/Flower.mp3' controls audioplay></audio>
    <p>Название</p>
    <audio src='audio/Dich.mp3' controls audioplay></audio>
    <p>Название</p>
    <audio src='audio/Flower.mp3' controls audioplay></audio>
    <p>Название</p>
    <audio src='audio/Dich.mp3' controls audioplay></audio>
    <p>Название</p>
    <audio src='audio/Flower.mp3' controls audioplay></audio>
    <script>
      const aud = document.querySelectorAll('audio')
      Array.from(aud).map(el => el.addEventListener('play', () => {
        const played = document.querySelector('[data-play="true"]')
        if(played && played !== el) {
          played.pause()
          played.removeAttribute('data-play')
        }
        el.dataset.play = 'true'
      }))
    </script>
    </body>
    Ответ написан
    4 комментария
  • Как сделать отложенную загрузку?

    black1277
    @black1277
    Вольный стрелок
    У вас сразу 2 вопроса - 1 когда долистают страницу, пример из ссылки:
    var options = {
        root: document.querySelector('#scrollArea'),
        rootMargin: '0px',
        threshold: 1.0
    }
    var callback = function(entries, observer) {
        /* Content excerpted, show below */
    };
    var observer = new IntersectionObserver(callback, options);

    и второй вопрос ленивая загрузка
    Гуглится всё за 30 секунд...
    Ответ написан
    Комментировать
  • Как показать определённое количество блоков по клику?

    hahenty
    @hahenty
    ('•')
    .box-list__item {
      display: grid;
    }
    .box-list__item:nth-child(8) ~ .box-list__item{
      display: none;
    }
    .box-list__item:nth-child(8) ~ .box-list__item.ui-box-active{
      display: grid;
    }


    [...document.querySelectorAll( '.box-list__item:nth-child(8) ~ .box-list__item:not(.active)' )]
      .slice(0,4)
      .forEach( el => el.classList.add('ui-box-active') )


    Понятно?
    Ответ написан
    1 комментарий
  • Как создать и в последствии скачать json файл?

    @Wispik
    вот пример с текстовым файлом, думаю с json разберешься
    var text = 'Some data I want to export';
    var data = new Blob([text], {type: 'text/plain'});
    
    var url = window.URL.createObjectURL(data);
    
    document.getElementById('download_link').href = url;
    Ответ написан
    Комментировать
  • Почему код работал слишком долго и был остановлен? Где ошибка в программе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Во-первых, 0 + '1' === '01'.
    Во-вторых вы обнуляете result один раз, а потом только дописываете к нему цифры.
    Ответ написан
    1 комментарий
  • Как проверить не изменился ли файл по ссылке?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Всем спасибо, похоже я нашел решение. На равне с типами запроса GET, POST и другими оказывается существует еще тип запроса HEAD. Этот тип запроса позволяет запросить заголовки ответа, без самого тела ответа.

    Соответственно факт изменения файла можно проверить через сверку заголовка ETag:
    (await fetch('/', { method: 'HEAD' })).headers.get('ETag');

    Заголовок HTTP ответа ETag является идентификатором специфической версии ресурса. Если ресурс по заданному URL изменился, будет сгенерированно новое значение Etag. Поэтому Etag чем-то похож на отпечаток ("fingerprints") и позволяет быстро определить являются ли два представления ресурса одними и теме же.

    https://developer.mozilla.org/ru/docs/Web/HTTP/Hea...
    Ответ написан
    1 комментарий
  • Бесконечный цикл useEffect?

    black1277
    @black1277
    Вольный стрелок
    Всё от того, что вы не желаете знать про жизненный цикл компонентов. Разберем по порядку, что происходит.
    1 компонент смонтировался
    2 срабатывает useEffect - он всегда срабатывает после того как готово DOM дерево.
    3 в useEffect срабатывает useState
    4 изменение состояния обязывает реакт сделать ререндер
    5 тут ключевой момент, компонент уже был смонтирован, поэтому происходит только его обновление - и вот тут useEffect ведет себя по разному. Если у него нет массива зависимостей - то он опять сработает и всё будет повторятся с 3-го пункта. Если же у него есть массив зависимостей - то он сработает только если после рендера обновления изменилось значение в этом массиве.
    Значит вам нужно как минимум указать newSendedMessage в этом массиве. НО! У вас есть и другая функция, которая изменяет стейт - sortMessages. Её тоже нужно указать в массиве зависимостей, если не хотите пропускать обновление при изменении receivedMsg. Но если просто поместить эту ф-ю в массив зависимостей - то опять получите бесконечный перерендер - потому что ф-я каждый раз будет разная (она пересоздается каждый раз во время обновления). Есть разные варианты как это исправить - или завернуть sortMessages в useCallback (у которого должен быть массив зависимостей с receivedMsg) или перенести саму ф-ю sortMessages внутрь useEffect и вызывать там. Тут вам решать какой вариант подходит логике вашего компонента больше.
    Ответ написан
    1 комментарий
  • Как понимать этот код, что здесь происходит?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Я не понимаю, что тут может остаться непонятным с предыдущего вашего вопроса.
    Цель - избаваться от циклических ссылок, которые делают сериализацию объекта невозможной. При этом ориентироваться требуется не на название поля, а на его значение.
    Именно это и происходит в функции replacer, с поправкой на то, что при первом вызове в replacer передаётся весь объект целиком с пустым ключом:
    Initially, the replacer function is called with an empty string as key representing the object being stringified.
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    key != "" && value == meetup
    Переводится как "если ключ не пуст (т.е. не первая итерация, в которой value ссылается на объект целиком) и значение равно искомому объекту, его нужно пропустить и не сериализовывать".
    Ответ написан
    1 комментарий
  • Оцените пожалуйста верстку?

    legengy_zeldy
    @legengy_zeldy
    Junior Frontend developer
    1) Лого вставлено через PNG, должно быть SVG! Сразу в глаза бросается!
    2) Картинку в поиске лучше через псевдоэлемент вставлять
    3) Инпут надо в form оборачивать (в хэдэре)
    4) Profile и repositories - почему в обернуты? Секция - это весь этот экран в совокупности, это просто divы должны быть
    5) ссылка gaearon, структура - h3 внутри ссылки, это что вообще?)
    6) Картинки фолловеров - псевдоэлементами должны быть вставлены (ИМХО)
    7) "249" после заголовка Repositories - тоже должен быть псевдоэлемент (или спан хотя бы, точно не часть заголовка)
    8) с ссылками в правом блоке тоже самое - почему теги h внутри ссылки? ЗАЧЕМ?))
    9) В карточках нижняя надпись - не заголовок, либо просто внутри div текст, либо span
    10) В pagination опять заголовком вставлено, это не заголовок, он не объявляет важный информационный блок! И опять же разбиение на spanы должно быть, чтобы с backend'а данные подставлять удобно
    Ответ написан
    Комментировать
  • Запуск рендера на реакте, после завершения работы функции?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    React не ждёт для запуска рендера максимально неудобного момента, чтобы вам насолить. Отрисовку триггерите вы сами, изменяя state или props. Никаких деталей про них вы не привели, так что точнее сказать ничего нельзя.

    Попробуйте использовать что-то вроде этого:
    class Something {
      state = {token: ``}
    
      render() {
        if (!this.state.token) {
          return null;
        }
    
        return <ВсёОстальное/>
      }
    }
    Ответ написан
    Комментировать
  • Почему for..in не работает для коллекции Map?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Документация (только англоязычная версия) вроде бы, исчерпывающе объясняет:
    The for...in statement iterates over all enumerable properties of an object
    that are keyed by strings
    (ignoring ones keyed by Symbols),
    including inherited enumerable properties.


    Ожидаются свойства-строки. Map заточен под другое и позволяет использовать в качестве ключей что угодно, в том числе объекты. Значения добавленные в Map – это не его свойства в привычном смысле.

    Map, как и «всё в JavaScript» — объект. Поэтому можно взять и назначить ему свои свойства. Вот они вполне себе попадут в перечислёж for..in:
    const m = new Map();
    m.set({}, 'obj');
    m.set('a', 'A');
    
    // это другое
    m.b = 'B';
    
    for (let prop in m) {
      console.log('property', prop);
    }
    
    // property b
    Ответ написан
    Комментировать