• Как изменить скрипт, что бы после завершения опроса - он перенаправлял на сайт?

    @cloudz
    MisTFoR, если нужно что-то убрать, уберите
    все зависит от ваших требований
    Написано
  • Как собирать релиз frontend?

    @cloudz Автор вопроса
    планировались как положено, но по окончанию спринта бизнес попросил часть функционала отложить
    Написано
  • Как использовать ref в кастомной форме для скрола к элементу?

    @cloudz Автор вопроса
    мне кажется такое решение не сильно отличается от решения через ref, разве нет?
    Реф это же ссылка на дом элемент, с предложенным вариантом выйдет похожий результат, нужно будет собрать сначала все элементы, а после получения ошибок, определить самый верхний и сделать к нему скролл.

    Мой вопрос скорее не про ресурсоемкость решения, а про выборку этих самих элементов.

    Хочется сделать подобное вот

    Но элементы текущей формы, так динамически создать не получится, уж слишком специфические там контролы
    Написано
  • Как организовать rest API с redux saga?

    @cloudz Автор вопроса
    А как обрабатывать например такой кейс с таким подходом.

    Есть страница на которой 2 компонента.
    1. Лента со списком имен юзеров.
    2. Селект со списком имен юзеров.

    При первом заходе мы загружаем всех юзеров с бека в ленту (getUsers), показываем прелоадер в ленте пока грузим, потом отображаем.

    При выборе селекта мы делаем отдельно повторный запрос (getUsers), чтобы получить обновленный список имен юзеров (их могло стать больше на беке, нужны актуальные данные в селекте). Но нам не нужно обновлять ленту юзеров и показывать прелоадрер в ленте, а только в селекте.

    Получается что нужно дублировать сагу и кусок стора? т.к лента следит за состоянием getUsers loading (true/false) и селект следит тоже.

    или как еще такое решается?
    Написано
  • Нужно ли дублировать передачу пропсов в родительком компоненте?

    @cloudz Автор вопроса
    Спасибо!

    Возникает вопрос, если табы передаются как children в компонент tabs, то как в компоненте tabs определять какой children делать активным?

    Сейчас я использую подход в котором пребираю children в tabs и дописываю дополнительный props active одному из детей (Tab), корректно ли так делать? или нет?
    При редактировании child в tabs, приходится переписывать onClick в child, на такой
    onClick = () => {
      child.onClick()
      setActiveTab(childName)
    }


    поскольку в табе может быть свой онклик, и внутри tabs есть логика для установки активного таба
    Написано
  • Где и как обрабатывать логику не относящуюся к ui в spa?

    @cloudz Автор вопроса
    1. Время жизни токена хранится в самом токене. Токен поставляется бэкендом. Сооответственно если мы просрочим токен, и отправим запрос с ним на бек, то нас разлогинет.
    2. Чтобы не было проблем с производительностью в отслеживании событий, есть подходы по их оптимизации, например throttling или debounce.
    Написано
  • Fetch или axios или jqueryAjax или что?

    @cloudz Автор вопроса
    в axios есть возможность не проходить по редиректам? или например пройти и понять что был редирект?

    в fetch есть флаг redirect: "manual" который позволяет не проходить, или есть тип request opaqueredirect после редиректа, т.к обработать итуации до и после можно
    Написано
  • Fetch или axios или jqueryAjax или что?

    @cloudz Автор вопроса
    вопрос в поддержке не стоит, сейчас все полифилится и транспайлится.

    в axios есть возможность не проходить по редиректам?
    Написано
  • В какой момент проставляются environment?

    @cloudz Автор вопроса
    понял, значит на этапе сборки.

    просто я думал что можно их использовать после сборки проекта
    Написано
  • Как обрабатывать 302 редирект в spa?

    @cloudz Автор вопроса
    по формату апи, это как пример привел.

    а что делать например если юзеру запрещено слать запрос?
    Апи отвечает что пользователя нужно перенаправить и возвращает 302 редирект
    Написано
  • Почему разный регистр в node_modules на разных машинах?

    @cloudz Автор вопроса
    Алексей Тен, ставится на разных компах так же, с разным регистром.
    Написано
  • Как получить данные через fetch с авторизацией?

    @cloudz Автор вопроса
    так же возвращает 401 + ругается на корс
    Написано
  • Как организовать react с хуками взамен контейнеров?

    @cloudz Автор вопроса
    Robur,

    с миру по нитке
    например о контейнерах и компонентах
    в доке редакса https://redux.js.org/basics/usage-with-react
    или в патернах
    https://reactpatterns.com/#container-component
    https://reactpatterns.com/#function-component

    а по поводу pages, просто обратил внимание на структуры разных проектов из гитхаба или статей , например тут https://blog.bitsrc.io/structuring-a-react-project...
    Написано
  • Как организовать react с хуками взамен контейнеров?

    @cloudz Автор вопроса
    abberati т.е
    контейнеры, которые являются компонентами классами по сути, преобразуются в функциональные с хуками и возвращают глупые компоненты, я правльно понимаю? в общем теже контейнеры только на хуках
    Написано
  • Будет ли забиваться память при таком коде и правильно ли организован класс?

    @cloudz Автор вопроса
    Никита Полевой, Да, пробую решить таск в ООП стиле. Хотелось аакумулировать всю логику в классе, чтобы с ним потом можно было работать и в других случаях.
    Поэтому всеже буду создавать новый блок каждый раз в интервале, потому что все же это разные блоки отправляются, а не один и тот же с новым цветом)

    спасибо за варианты решения
    Написано
  • Будет ли забиваться память при таком коде и правильно ли организован класс?

    @cloudz Автор вопроса
    Никита Полевой, в констукторе класса можно сделать запрос в другое место?
    Т.е при создании нового блока, 1 свойство берется из бекенда, например цвет.
    Или так нельзя делать?
    Собственно для этого я и создвал метод create, чтобы в нем получить некоторые данные, затем уже манипулировать готовым блоком с полученным цветом и заданным руками типом.
    Поскольку из конструктора нельзя вернуть промис (или можно?), пришлось добавить метод create.

    Как только промис разрешися в create, значит блок полностью создан и его можно отправить на серв

    class Block {
      constructor(data) {
        if (!data.type) {
          throw new Error('No type passed in Block constructor!');
        }
    
        this.type = data.type;
      }
    
      create() {
        fetch('http://test.com/color')
        .then(r => {
          this.color = r;
          return this;
        });
      }
    }
    
    function send(data) {
      fetch('http://test.com', {
        method: 'POST',
        body: JSON.stringify(data),
      })
      .catch(console.log)
    }
    
    function initSending(data, Construct) {
      setInterval(() => {
        const unit = new Contruct(data);
        unit.create().then(r => send(r))
      }, 10000);
    }
    
    initSending({type: 'Brick'}, Block);


    (мб можно даже просто обновлять color вызывая create при каждом интервале, хотя наверно лучше создавать новый объект)
    Написано
  • Будет ли забиваться память при таком коде и правильно ли организован класс?

    @cloudz Автор вопроса
    Никита Полевой, спс.

    обновленный код достаточен или есть еще что следует изменить?
    Написано
  • Будет ли забиваться память при таком коде и правильно ли организован класс?

    @cloudz Автор вопроса
    Спасибо за развернутые вопросы. Как раз не мог понять в чем мои косяки.
    Постараюсь ответить как я рассуждал при написании.
    1. Обратил внимание что функция асинхронная и создание блока заимает время.
    2. Действительно, не зачем, переписал код. (Хотел иметь возможность получить последний созданный блок)
    3. Действительно, не зачем, переписал код с использованием this. (Когда писал думал что нужен экземпляр для использования методов, затупил)
    4. тоже что и в 3.
    5. Он писался в свойство, последнего созданного блока, по сути тоже не зачем, переписал.

    Такой код будет спроектирован верно? Подскажите что еще по вашему мнению переписать?

    class Block {
      constructor(color) {
        this.color = color || '';
      }
    
      create() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            return resolve({type: 'Brick', color: this.color});
          },0);
        });
      };
    
      prepareForSend(block) {
        return block.color = block.color.toUpperCase();
      };
    
      initSending() {
        setInterval(() => {
          this.create().then(block => {
            const preparedBlock = this.prepareForSend(block);
            send(preparedBlock);
          });
        }, 10000);
      }
    }
    
    function send(block) {
      fetch('http://test.com', {
        method: 'POST',
        body: JSON.stringify(block),
      })
      .catch(console.log)
    }
    
    const block = new Block();
    block.initSending();
    Написано
  • Зачем frontend девелоперу такой большой опыт?

    @cloudz
    Ни кто, ни кому, ничего, не должен.

    Из 10 собеседований, 6 отнеслись скептически к моим знаниям и навыкам на основе моего опыта и провели промежуточные технические интервью или дали тз.

    По итогу у меня было 3 оффера. Из которых уже выбирал я сам.
    Опыт не главное, главное то, как вы решаете поставленные задачи.

    Если вы решаете сложную задачу без опыта за тот же период что и опытный и с тем же качеством. То кто из вас опытный? Вы или тот кто с опытом? Какая разница?
    Написано
  • Преобразование данных от API или новый endpoint?

    @cloudz Автор вопроса
    managrib, Иван Шумов
    Какие варианты решения вообще существуют? какие практики наиболее распространены?
    Написано