Задать вопрос
  • Почему Vite выдает React is not defined?

    Aetae
    @Aetae
    Ну довольно очевидно что:
    1. Чтоб работал React(и в частности jsx) - сам React должен быть подключён.
    2. Твой линтер выкинул явные подключения React.
    Из этого можно сделать предположение, что ты не компенсировал это никак неявным подключением React.

    Vite же лишь сборщик, он вообще для Vue делался и сам по себе о React ничего не знает. Если ты используешь какую-то настроенную сборку, то она по идее должна была об это позаботиться. Если собираешь сам - то и подключать весь нужный обвес надо самому,
    Написано
  • Как подтянуть дополнительную информацию для хлебных крошек?

    Aetae
    @Aetae
    Владислав Андреев,
    Aetae, а, стоп, я похоже понял, из компонента, в котором ФИО имеется кидать в контекст и перетягивать в крошках, я правильно понял?

    Да. При страрте добавлять, при закрытии убирать, при обновлении обновлять. Сам контекст универсален - в дугое компоненте можешь кинуть туда что-другое, товар там или организацию.
    Можешь сразу сделать хук с этим контекстом, который автоматизирует удаление и обновление.
    Написано
  • Как правильно сформировать объект-результат в перегруженной функции в TypeScript?

    Aetae
    @Aetae Куратор тега TypeScript
    Переписанный вариант абсолютно нормальный. Про "дублирование" from даже на думай:
    1. такой вариант даже менее многословен чем первый, из-за отсутствия обращения к объекту, если вопрос в этом;
    2. он создаст все равно только один объект, в зависимости от if ветки;
    3. он быстрее будет работать на v8(добавление свойств в объект, которых изначально не было там затратное) - но это только на случай миллионов вызовов.

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

    P.S. Если вместо хипстерской стрелки использовать нормальную функцию, то можно перегрузки писать так:
    function reserve(from: Date, destination: string): Ticket; 
    function reserve(from: Date, to: Date, destination: string): Ticket;
    function reserve(from: Date, toOrDest: Date | string, destination?: string): Ticket {

    что на мой взгляд куда нагляднее и удобнее.
    Написано
  • Как заставить Vue-router работать до завершения анимации?

    Aetae
    @Aetae Куратор тега JavaScript
    Не, эт безумие, сделай пример на codepen\jsfiddle глянем.:)
    (можешь форкнуть этот чтоб не возиться с добавлением библиотек)
    Написано
  • Как подтянуть дополнительную информацию для хлебных крошек?

    Aetae
    @Aetae
    Используй контекст и клади туда из низового компонента.
    Написано
  • Как называется подпрограмма внутри массива?

    Aetae
    @Aetae Куратор тега JavaScript
    Если это функция - то метод, если это переменная содержащая значение, то свойство.

    ThunderCat, тут не согласен.:) Метод - это то что прототипе и часть класса, а свойство объекта с функцией - это всё ещё просто свойство с функцией.

    tyxeo, ты имел ввиду var o = {x: function(){}}? :)

    Но на самом деле всё это фигня, конкретно для js нет никаких фиксированных наименований, все они взяты из иных языков, где имели чёткие рамки, по схожести чисто на глаз. Сам js максимально свободный: твори что хощь, называй как хошь.
    Написано
  • Возможна ли хорошая карьера в машинном обучении без высшего образования?

    Aetae
    @Aetae
    Ну именно по ml есть два варианта.

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

    Второй вариант не требует ничего, кроме кое-какого уровня скрипт-кидди и удачи. Просто поглощаешь всякие мануалы от таких же и накладываешь скрипты на скрипты, "играя" с бесконечными конфигурациями уже готовых инструментов без особого понимания, но с энтузиазмом, становясь дата-шаманом. В центральные конторы не попадёшь, но зато в одну из миллионов мелких, которые сами не знают зачем им ml - легко(вышка там чисто формально требуется, можно пробиваться и студентом, или с опытом\наработками).

    Ну и в любом случае, 17 лет - это приговор. Никто без блата тебя никуда не возьмёт, только на чисто "студенческие" места, типа техпода первой линии. Если ты, конечно, не супер гений, у которого уже есть что показать. Нужно ли тебе такое счастье - смотри сам. WbICHA нормально расписал.
    Написано
  • Допустимы ли такие коммиты?

    Aetae
    @Aetae
    Насколько я понял он и хочет практически обычный фло с сквашами фича веток в основную. Его просто смущает, что история коммитов в основной ветке будет выглядеть как v1.2.3, v.1.2.4, v1.3.0... без пояснений.:)
    Написано
  • Как называется подпрограмма внутри массива?

    Aetae
    @Aetae Куратор тега JavaScript
    Строго говоря, методы принадлежат классу, объект только их вызывает. А те функции, которые таки можно положить в объект, и которые практически во всём ведут себя как методы - это таки просто свойства содержащие функции.:)
    Написано
  • Как называется подпрограмма внутри массива?

    Aetae
    @Aetae Куратор тега JavaScript
    Saboteur, ну, если на то пошло, с тем же успехом то же самое ещё недавно можно было сказать о методах инстанса класса: их тоже можно было передать в любой другой объект или переменную и вызвать так, даром что this поплывёт.:)
    Написано
  • Как убрать выделяющую линию в RubyMine или PHPStorm?

    Aetae
    @Aetae
    Контрастность монитора подкрутить.:)
    Написано
  • Ререндеринг при использовании setError?

    Aetae
    @Aetae Куратор тега JavaScript
    RED2190, лол, там всё плохо. Если использовать register с определённым именем, то, похоже, под таким именем могут быть ошибки только самого поля, а все setError извне будут отброшены.

    Надо либо сделать вашу функцию правильным валидатором поля: перенести условие в конец и возвращать саму ошибку в валидатор без всяких setError:
    const onInputCallBack = useCallback((files) => {
        // ....
        if( files[0].size > 150 ){
          return 'Недопустимый размер'
        }
    }

    Либо поместить в onInput и там уже делать setError руками(и под другим именем, не file).

    P,S. size у файла в байтах, а не килобайтах, надо делить\умножать на 1024.
    Написано
  • Как использовать :key в пользовательской директиве?

    Aetae
    @Aetae Куратор тега Vue.js
    MaxRyazan, вот тебе пример:

    Сколько ты по-толгглишь элемент, столько clickOutside обработчиков у тебя и навесится. Потом при внешнем клике у тебя столько раз он и вызовется(причём уже без учёта элемента - потому что это уже другой элемемент).

    Потому что, , чтобы removeEventListener убрал предыдущий обработчик, ему этот самый обработчик надо передать, а не новую функцию, с виду похожую на него.
    Написано
  • Ререндеринг при использовании setError?

    Aetae
    @Aetae Куратор тега JavaScript
    RED2190, посмотрел внимательнее: у тебя на форме два одновременно активных поля 'file': один всегда есть, второй появляется при ошибке. Полагаю это не правильно, не может быть два инпута с одинаковым идентификатором.
    Написано
  • Отправка видеороликов через partial?

    Aetae
    @Aetae Куратор тега JavaScript
    Вроде бы всякие video пока мету на загрузят - не стартуют, так что по идее "оно само" должно разрулить...
    Написано
  • Ререндеринг при использовании setError?

    Aetae
    @Aetae Куратор тега JavaScript
    RED2190, я ничего не знаю про useForm, но могу предположить, что раз часть шаблона с ...register становится скрыта, то useForm логично считает, что она нафиг не нужна, и очищает всё с ней связанное.
    Возможно стоит вынести регистрацию формы для файла в общий render безотносительно шага:
    const fileField = register('file', { validate: (e) => onInputCallBack(e) } );
    ....
    return (
      ...
      <input type="file" id={id} {...fileField}/>
    Написано
  • Как использовать :key в пользовательской директиве?

    Aetae
    @Aetae Куратор тега Vue.js
    MaxRyazan, никакие листенеры у тебя не удаляются, мистер вечный джун.
    У тебя они бесконечно навешиваются и не падают только потому, что сохраняют в замыкании ссылку на уже удалённый из dom элемент, тем самым организуя утечку памяти.
    Чтоб removeEventListener сработал ему надо передать ссылку на существующий обработчик, как это делает автор поста, а не новосозданную анонимную функцию.
    Написано
  • Как использовать :key в пользовательской директиве?

    Aetae
    @Aetae Куратор тега Vue.js
    Мужик, твой removeEventListener работать не будет, потому что удалять надо то что навешали. И if(bind.value) бессмыслено, т.к. за время перед кликом оно может поменяться.
    В общем дичь ты написал.
    Написано
  • Как прочитать "будущий" файл из пакета npm?

    Aetae
    @Aetae
    Не является. В большинстве случаев конечно вызов скриптов будет из корня приложения, а потому cwd = корню, но абсолютно не гарантировано.:)
    Написано
  • Как обновить запрос используя AbortController?

    Aetae
    @Aetae Куратор тега JavaScript
    Всё работает как должно, что можно легко подебажить:
    {
    let controller = new AbortController();
    let i = 0;
    async function updateMessages() {
      const index = i++;
      console.log(index, 'started updateMessages');
      
      controller.abort();
     	console.log(index, 'abort called for previous AbortController');
      
      controller = new AbortController();
      controller.signal.addEventListener('abort', () => {
        console.log(index, 'aborted')
      });
     	console.log(index, 'created new AbortController');
      
      console.log(index, 'requset start');
      let response = await fetch("http://localhost:3000/messages", {signal: controller.signal});
     	console.log(index, 'requset headeers fetched');
      let messages = await response.json();
      console.log(index, 'requset json fetched');
      
      counter = messages.length;
      console.log(index, 'counter set');
      
      let container = document.getElementById("container");
      container.innerHTML = "";;
      console.log(index, 'innerHTML cleaned');
      
      console.log(index, 'renderMessages calling');
      renderMessages(messages);
      console.log(index, 'renderMessages called');
    }
    
    updateMessages()
    updateMessages()
    updateMessages()
    }

    Проблема у тебя где-то в другом месте.
    Написано