Задать вопрос
  • Как удалить дублирование стейтов в reactjs?

    ivankprod
    @ivankprod
    Системный / веб fullstack-разработчик
    Если нужно просто убрать дубликаты, то:

    return (
        <div>
          {countryNames && countryNames.filter((item, index, array) => {
               return index > 0 ? item.COUNTRY_NAME !== array[index - 1].COUNTRY_NAME : true
          }).map((vyvod) => {
               let country = vyvod.COUNTRY_NAME
               return <div> {country}</div> // НЕ ЗАБЫВАЕМ ПРО KEY!!!
        })}
        </div>
      );


    Если же нужно убрать дубликаты в стейте, то:
    .then((res) => {
       setCountryNames(() => {
          return res.DATA.filter((item, index, array) => {
               return index > 0 ? item.COUNTRY_NAME !== array[index - 1].COUNTRY_NAME : true
          })
       })
    })
    Ответ написан
    9 комментариев
  • Как узнать, имеет ли столбец unique?

    iMedved2009
    @iMedved2009
    Не люблю людей
    show columns from mytable where Field = 'name';
    Ответ написан
    Комментировать
  • Как массово скачать файлы по списку?

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

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Т.е. не получится это сделать с помощью wget в командной строке, т.к. куков не будет

    Кто сказал?
    https://qna.habr.com/q/444245
    wget --no-check-certificate --quiet \
      --method GET \
      --timeout=0 \
      --header 'Cookie: PHPSESSID=ocqfdbv0kv6qs5jv4at6uk36pf' \
       'https://test-mis.ru/api/****************************************'
    Ответ написан
    Комментировать
  • Как добавить .webp в React?

    theobroma
    @theobroma
    javascript developer (ReactJS)
    1. Gulp точно не нужен. Мне прям вспомнился 2016 - тогда еще были сборки реакта галпом...
    2. В составе create-react-app используется webpack. Нужно просто расширить конфиг с помощью craco.
    Вот тутор , который сам для себя проверял на работоспособность: How to Optimize Images for Usage in Websites
    Ответ написан
    1 комментарий
  • Как сформировать SQL запрос - фильтр по нескольким полям?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Нужно ставить скобки:
    SELECT * from 'Клиенты' 
      WHERE (surname Like '%Ива%' or name Like '%Ива%' or secondname Like '%Ива%') 
        AND (surname Like '%Никол%' or name Like '%Никол%' or secondname Like '%Никол%')

    Можно использовать соединение:
    SELECT * from 'Клиенты' 
      WHERE CONCAT_WS(',' surname, name, secondname) LIKE '%Ива%'
        AND CONCAT_WS(',' surname, name, secondname) LIKE'%Никол%'
    Ответ написан
    Комментировать
  • Почему переданный в функцию параметр меняется?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Потому, что Number.MAX_SAFE_INTEGER в JavaScript это 2^53 - 1
    9007199254740991 // максимальное безопасное целое
    17848907461544179 // ваш ID больше – происходят округления


    TL&DR; передавайте такие post_id в кавычках, как строки.
    Ответ написан
    3 комментария
  • Как отправить body с помощью get запроса?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Так делать можно, но не нужно, можете привести это:
    A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

    Т.е. gолезная нагрузка в сообщении запроса GET не имеет определенной семантики; отправка тела полезной нагрузки в запросе GET может привести к тому, что некоторые существующие реализации отклонят запрос. Если обратиться к более старым спецификациям, то там вообще написано, что надо игнорировать тело при GET. Да и вообще посмотрите на API крупных сервисов, хоть где-то при работе с ними вы в гете отправляете body?), а еще можете привести в пример Swagger и поведение GET там (Swagger ни за что в жизни не отправит body в GET). Но на любой пример есть и антипример, например, Elasticsearch принимает body в GET. Также если полезть в спецификацию, то согласно RFC 2119 разработчики могут слать body, если на то есть веские причины, наверное, к этим причинам можно отнести большое число параметров или если это body не изменит какие-то данные.

    P.s. показывать на Postman не круто, т.к. Postman , как минимум, сам добавляет заголовки и может отправлять form-data с выбранным пользователем заголовком application/json
    Ответ написан
    2 комментария
  • Можно ли через GET запрос отправлять телло запроса?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Всегда тело запроса ассоциировалось с методом POST

    "ассоциировалось".... Чтобы не было "ассоциаций" надо читать доки.

    Возможно ли отправлять тело запроса

    Достаточно почитать документацию https://www.w3schools.com/tags/ref_httpmethods.asp и станет понятно, что GET-запрос передаёт данные в URL, а не в теле запроса, и есть ограничение на объём передаваемых данных, это очень небольшое значение.
    Ответ написан
  • Как лучше реализовать защищённый react router?

    vovvkka
    @vovvkka
    Я использую так, если пользователя нет в стейте, то проверка не срабатывает, и производится редирект на ту страницу, которую я передал пропсом как redirectTo, а если пользователь есть, то он просто возвращает обычный роут.

    const ProtectedRoute = ({isAllowed, redirectTo, ...props}) => {
        return isAllowed ?
            <Route {...props}/> : <Redirect to={redirectTo}/>
    };
    
    const App = () => {
        const user = useSelector(state => state.users.user);
    
        return (
            <Switch>
                <ProtectedRoute
                    isAllowed={user}
                    redirectTo="/"
                    path="/new-artist"
                    component={NewArtist}
                />
              
                <Route path="/register" component={Register}/>
                <Route path="/login" component={Login}/>
    
                <Route component={() => <h2>Not Found.</h2>}/>
            </Switch>
        );
    };
    Ответ написан
    Комментировать
  • Почему не отображаются параметры URL?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Метод pushState() браузерного History API:
    const url = new URL(window.location);
    url.searchParams.set('qna', 'habr');
    window.history.pushState({}, '', url);
    // в адресной строке теперь ?qna=habr
    Ответ написан
    1 комментарий
  • В основе flex или inline-block?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Дело в том, что флекс был не всегда. И раньше элементы в ряд выстраивали инлайн-блоками, ещё раньше флоатами.

    Сейчас инлайн-блок нужен для того, для чего придуман, т.е. чтобы элемент получил строчно-блочное отображение. Т.е. элемент ведёт себя снаружи как строчный, а внутри как блочный. А также реагирует на свойства задающие ширину, высоту, отступы.

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

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сразу определим селекторы элементов и класс, они нам дальше понадобятся:

    const blockSelector = 'селектор блоков';
    const buttonSelector = 'селектор кнопок';
    const activeClass = 'класс, показывающий блок';

    Класс надо переключать не у всех блоков сразу, а у того, который соответствует нажатой кнопке. Как определить, какой блок нужен? Можно просто по индексу. Нажали третью кнопку - нужен третий блок. Как узнать индекс кнопки? Например, он передаётся в коллбек метода forEach. Т.е., в список параметров внешнего forEach добавляем индекс, и вместо внутреннего forEach выполняем обращение к соответствующему элементу коллекции блоков:

    const blocks = document.querySelectorAll(blockSelector);
    const buttons = document.querySelectorAll(buttonSelector);
    
    buttons.forEach((n, i) => {
      n.addEventListener('click', () => {
        blocks[i].classList.toggle(activeClass);
      });
    });

    Кстати, создавать отдельные обработчики клика для каждой из кнопок не обязательно, можно сделать один общий. Как при этом получать индексы? - их можно прицепить прямо к кнопкам. Например, в виде data-атрибута:

    const onClick = function({ currentTarget: { dataset: { index } } }) {
      this[index].classList.toggle(activeClass);
    }.bind(document.querySelectorAll(blockSelector));
    
    document.querySelectorAll(buttonSelector).forEach((n, i) => {
      n.dataset.index = i;
      n.addEventListener('click', onClick);
    });

    Также есть вариант вычислять индекс при клике:

    const blocks = document.querySelectorAll(blockSelector);
    const buttons = document.querySelectorAll(buttonSelector);
    
    buttons.forEach(n => n.addEventListener('click', onClick));
    
    function onClick() {
      const index = Array.prototype.indexOf.call(buttons, this);
      blocks[index].classList.toggle(activeClass);
    }

    А вообще, если у каждой из пар кнопка-блок есть отдельный общий предок (const containerSelector = '...';), то индексы не нужны. Достаточно от нажатой кнопки подняться до общего предка кнопки и блока, и найти внутри блок (а можно даже и не искать, если добавлять класс контейнеру; конечно, стили придётся в этом случае немного изменить, вместо .блок.класс будет .контейнер.класс .блок):

    const toggleBlock = button => button
      ?.closest(containerSelector)
      ?.querySelector(blockSelector)
      .classList
      .toggle(activeClass);
    
    
    // можно добавить обработчик клика каждой кнопке индивидуально
    document.querySelectorAll(buttonSelector).forEach(function(n) {
      n.addEventListener('click', this);
    }, e => toggleBlock(e.currentTarget));
    
    // или один раз на всю страницу
    document.addEventListener('click', e => {
      toggleBlock(e.target.closest(buttonSelector));
    });
    Ответ написан
    Комментировать
  • AUX и Jack 3,5 - это одно и то же?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не путайте тёплое с мягким.
    Jack 3.5 - это форм-фактор разъёма. Может быть стандарта TS (моно), TRS (стерео или моно+микрофон), TRRS (стерео+микрофон).
    AUX - это назначение разъёма (Auxiliary - дополнительный).
    А наушники надо подключать в разъём, предназначенный для подключения наушников. Как правило, он обозначен соответствующим знаком. На некоторых материнских платах бывают конфигурируемые разъёмы, назначение которых задаётся из панели управления звуком.
    Ответ написан
    1 комментарий
  • AUX и Jack 3,5 - это одно и то же?

    @Mercury13
    Программист на «си с крестами» и не только
    AUX ≠ Jack 3,5 ≠ наушники.
    1. AUX (неусиленный линейный выход) может быть и другими разъёмами — чаще всего DIN-5 или два RCA. Допустим, в моём самодельном переключателе колонки-наушники на колонки идут два RCA из-за сверхнадёжности, а на наушники — ну, так и быть, джек.
    2. На миниджеке 3,5 мм может быть и микрофон. У микрофонов отдельный механизм работы, и ухи от микрофона отличают омметром — наушник имеет сопротивление около 30 Ом, а микрофон — около 1к. И даже ухи с микрофоном, если джек 4-контактный.
    3. В советской аппаратуре существуют разъёмы для высокоомных наушников, и низкоомные могут плохо работать. (Сомневаюсь, что погорят — для проверки полярности часто берут и подключают к ним батарейку, хотя на AUX меньше вольта.) Впрочем, не видел ни одного устройства, где этот разъём — джек.

    Но в целом разъёмы для современных низкоомных наушников и внешней аудиоаппаратуры электрически сходны, подключай свободно. Могут быть проблемы с громкостью и/или помехами (как у меня в машине — если заряжать смартфон и выводить звук с него на магнитофон, будут помехи, зависящие от оборотов двигателя), но работать будет.
    Ответ написан
    2 комментария
  • Как сортировать сначала по уникальным значениям затем остальные?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    select *
    from tbl
    order by row_number() over(partition by user_id order by views desc), views desc;


    sql online editor
    Ответ написан
    Комментировать
  • Как обойти блокировку от парсинга для почты?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Так как пароль нужен только для сторонних приложений, то вывод один - маскироваться под родное приложение. Перехватить траффик, декомпилировать или иными способами выяснить что именно позволяет отличить ваше приложение и родное.
    Ответ написан
    Комментировать
  • Выборка записей где значение больше чем у родителя?

    iMedved2009
    @iMedved2009
    Не люблю людей
    select 
      people.* 
    from people 
    join people as parent on people.parent_id = parent.id 
    where people.size > parent.size;
    Ответ написан
    Комментировать
  • Как найти настоящего эксперта по ML (для консультаций), а не выпускника "курсов дата-саенсов" с бэкграундом копирайтера?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Например среди разработчиков банковского скоринга. Только они не оказывают платных консультаций. Задайте себе вопрос, если бы вы получали огромные деньги за программирование, которые вы любите, стали бы вы в свободное время подрабатывать консультантом?
    Ответ написан
    3 комментария
  • О каких IT специалистах говорят, когда речь идет о дефиците кадров?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Откуда у вас миф о "50 человек на место, если убрать новичков"?

    Для уверенности буду говорить о бэкенде, но тимлид фронтов моей команды говорит, что и у фронта ситуация похожая. На одну нашу вакансию прилетает 50-200 резюме в неделю, в зависимости от активности рекрутёров, и все они от джунов, за исключением одного-двух слабых мидлов с опытом не больше трёх лет. Причём эти мидлы брезгливо морщатся на зарплаты меньше 300. Зачастую даже они получают оффер от другой компании быстрее, чем мы заканчиваем их собеседовать. Сильный мидл попадается раз в два-три месяца. Сеньоры не попадаются вообще. В некоторых банках уже несколько лет почти тысяча незакрытых вакансий.
    Ответ написан
    9 комментариев