• Почему у элемента появляется style="display: none;"?

    @slide13
    frontend/web-developer
    Ну так у вас в if вызывается метод fadeOut на классе box, а в jquery fadeout после того как opacity элемента достигнет 0 убирает его полностью как раз через установку display в none
    Ответ написан
    Комментировать
  • Связь Javascript с интернетом?

    @slide13
    frontend/web-developer
    Вам нужен сервер для этого. Я для парсинга веб страниц использовал cheerio для nodejs сервера. Соответственно, отправляете данные с инпута к себе на сервер, а дальше уже с помощь cheerio делаете запросы куда вам нужно, парсите результаты и отправляете себе на сайт обратно нужные результаты. Можно и периодически фоном нужные данные парсить и через вебсокет пушить результаты на сайт
    Ответ написан
    Комментировать
  • Как работает функция componentDidUpdate?

    @slide13
    frontend/web-developer
    1. Вы ввели "1", нажали кнопку: у родителя меняется состояние на {value: "1"}, Child обновляется первый раз
    2. componentDidUpdate не срабатывает при первом рендере, поэтому в Child просто выводится Hello!
    3. В инпуте все еще "1", вы нажали второй раз кнопку. Снова вызывается setState с {value: "1"}, но каждый вызов setState приводит к перерендеру компонента, поэтому после второго клика происходит обновление родителя и вслед за ним потомка
    4. На второй перерендер у Child срабатывает componentDidUpdate, и т.к. состояние в потомке не определено, т.е. по дефолту равно null, то срабатывает условие в if в componentDidUpdate
    5. Child обновляет свой state и записывает туда {value: "1"}, после снова обновляется, но т.к. теперь предыдущий state был равен null, а текущий {value: "1"}, то условие if в componentDidUpdate уже не выполняется
    6. Добавляете в инпуте цифру "2", нажимаете кнопку. Родитель меняет состояние на {value: "12"} и обновляется вместе с потомком
    7. И дальше ответ на ваш вопрос: у Child снова после обновления срабатывает componentDidUpdate. При этом предыдущее значение у него в state осталось то, что было записано в пункте 5 и текущее тоже равно этому же значению, т.е. в этом случае опять сработает if и в Child изменится состояние на {value: "12"}
    8. Child снова обновляется после изменения своего состояния, срабатывает componentDidUpdate, предыдущее значение состояния value выводит "1", а текущее уже "12" так что if снова не срабатывает


    Надеюсь понятно написал ) Не понятно только зачем вам в Child нужно состояние, которое дублирует пропы, так делать не надо
    Ответ написан
    3 комментария
  • Почему выдаёт ошибку cannot get?

    @slide13
    frontend/web-developer
    чтобы отдавать статику по прямому урлу, в том числе и html - надо вначале подключить express.static мидлвар с указанием папки, где эти статичные файлы лежат, т.е. в данном случае лучше переместить html, например, в папку public, далее использовать ее для отдачи статики:
    app.use(express.static('public'))

    а в редиректе добавить путь к папке:
    res.redirect("/public/cA.html");
    это если именно редирект нужен на статику.

    из более правильного варианта - добавить роут на get "/ca" и отдавать на запрос файл, как и на "/", чтобы по одному файлу отдавать, а не статику расшаривать всю

    ну и 3й вариант - вместо редиректа сразу отдавать файл, тут уже смотря как тебе надо.
    Ответ написан
    2 комментария
  • Как сделать сброс стилей в styled components?

    @slide13
    frontend/web-developer
    Либо вытаскивай нужные стили для сброса и указывай в createGlobalStyle, либо есть библиотека styled-normalize, просто компонент выше приложения вставляется:

    import { Normalize } from 'styled-normalize'
    ...
    <Normalize />
    <App />

    Можно и через createGlobalStyle вставить, все в доке есть по styled-normalize
    Аналогично для reset css
    Ответ написан
    1 комментарий
  • Стоит ли использовать хуки вроде useState когда уже управляешь состоянием с помощью Redux?

    @slide13
    frontend/web-developer
    Про редакс уже все сказали, часто есть необходимость использовать useState при наличии redux и это нормально.

    Про replace. Т.к. в replace у строки вторым параметром можно передать функцию, то здесь явно можно этим и воспользоваться:
    сделать объект, где ключом была бы подстрока из совпадения, а значением - то, на что ее нужно заменить и потом по совпадению подставлять нужное значение из объекта, примерно так:
    let matches = {
      ",": "",
      "в": "В",
      "с": "С",
      " г.": ""
    }
    
    .replace(/с|в|\sг./g, (match) => matches[match])

    Но из того, что я вижу, проще взять библиотеку dayjs и спокойно форматировать даты, 2KB вряд ли стоят времени на написание своих реализаций форматирования дат

    Далее, естественно, не надо хранить функции в редаксе. Различные доп. функции лучше выносить в отдельную папку и разбивать по типам, например, для работы с датами, для форматирования чисел и т.д. и импортировать в нужные компоненты непосредственно оттуда.
    Это полезно, т.к. никто не знает, когда и кому она пригодится снова, а тем более если это большой проект. Написав ее где-то у себя в компонентах ее могут не найти и создать копию где-то еще. Также ее придется тестировать, импортировать утилиты для тестов проще из одного места, чем искать по компонентам, а утилиты все равно придется тестить отдельно от ui.
    Ответ написан
    Комментировать
  • Как прекратить отмену dragover на краю картинки (dragover постоянно слетает)?

    @slide13
    frontend/web-developer
    Если коротко, то dragleave всплывает от каждого дочернего элемента у дроп зоны, поэтому, в идеале, у зоны не должно быть дочерних элементов. Т.е. надо поверх картинок создать, например, полупрозрачный div, который и будет дроп зоной.

    Но, как быстрый вариант, можно добавить:
    pointer-events: none;
    для класса preview-image

    это как раз отменит эффекты указателя для всех дочерних элементов текущей дроп зоны, чтобы на них не срабатывал dragleave
    Ответ написан
    Комментировать
  • Как сделать чтобы значение прогрессбара начиналось с нужного процента?

    @slide13
    frontend/web-developer
    установить в условии определении процента дефолтный процент (10) на нулевой индекс

    index == 0 ? 10 : ...
    Ответ написан
    Комментировать
  • Как правельно поправить скрипт?

    @slide13
    frontend/web-developer
    У тебя обе функции для очистки таймера и ивентов для 1го и 2го ряда называются одинаково - flipped. Из 2х одинаковых функций выполняется только последняя. Т.е. когда наводишь на любой элемент 1го ряда срабатывает 2й flipped, который, соответственно, для 2го ряда добавляет css класс flip-card_flipped и поэтому весь второй ряд переворачивается. Что нужно будет сделать теперь, думаю, понятно.
    Ответ написан
  • Настроить страницу (pagination material ui)?

    @slide13
    frontend/web-developer
    Сколько вам нужно выводить на странице статей - на это число и делите общее кол-во статей. articlesTotalCount / MAX_ARTICLES_ON_PAGE, ну и округлить не забудьте на всякий.

    Только у вас интересный бэк какой-то - он на любой offset выдает статьи даже за пределом возвращаемого максимального кол-ва, я 200 000 пробовал и статьи там есть )
    Ответ написан
  • Как сделать плавное удаление элемента из массива с react-spring?

    @slide13
    frontend/web-developer
    Например, так:
    const transBoxes = useTransition(boxes, boxes => boxes, {
        from: { opacity: 0, width: 100, transform: "translateY(-100px)" },
        enter: { opacity: 1, transform: "translateY(0px)" },
        leave: [{ transform: "translateY(100px)", opacity: 0 }, { width: 0 }],
        config: {
          duration: 750
        }
      });
    Ответ написан
    1 комментарий
  • Функциональный компонент не перерендеривается, в чём проблема?

    @slide13
    frontend/web-developer
    Артур Галяев, у вас значение date не меняется, т.к. объект moment мутабельный и при манипуляциях с датой не меняет ссылку на исходный объект, date.add(1, 'month') это тот же самый объект момент. Если вам нужно в стейте хранить именно весь объект moment либо добавьте .clone() в конце, чтобы клонировать объект момент:
    date.add(1, 'month').clone()
    либо вместо moment используйте иммутабельную библиотеку для работы с датами, например, dayjs
    Я, в принципе, не советую moment использовать, когда есть более легковесные аналоги (moment - 70.4
    kB, dayjs - 2.8kB)
    Ответ написан
    1 комментарий
  • Как правильно прописать Redirect в react-router-dom?

    @slide13
    frontend/web-developer
    Почему у вас Suspense внутри Switch? Он должен быть выше и тогда все заработает как нужно, т.е. порядок такой:
    <Suspense fallback={<div>loading...</div>}>
      <Switch>
        <Redirect from="/" to="/documents" exact />
    Ответ написан
    1 комментарий
  • Как исправить ошибку multiparty?

    @slide13
    frontend/web-developer
    Потому что new забыли
    const form = new multiparty.Form();
    Ответ написан
    Комментировать
  • Как получить данные после редактирования таблицы webix?

    @slide13
    frontend/web-developer
    Пример: https://snippet.webix.com/shi6fqo0

    В первую таблицу добавил событие onAfterEditStop

    on: {
      onAfterEditStop(state, editor) {
        if(state.value != state.old) {
          webix.message(state.value);
          webix.message(editor.row);
          webix.message(editor.column);
        } 
      }
    }

    Где,
    state.value - отредактированное значение ячейки
    editor.row - id строки
    editor.column - свойство объекта строки

    Если нужны значения сразу всех ячеек, то их можно получить через mapCells, подробнее читать тут
    Ответ написан
    Комментировать
  • Formik не обновляет форму, как исправить?

    @slide13
    frontend/web-developer
    Я так понимаю у вас меняется initialValues при смене урла? Тогда необходимо добавить настройку enableReinitialize: true, чтобы форма обновлялась при смене initialValues
    Ответ написан
    Комментировать
  • Как сделать условие по переданному аргументу с консоли?

    @slide13
    frontend/web-developer
    В Vue можно определять свои переменные окружения только начинающиеся с VUE_APP_
    Ну а дальше в консоли что-то типа того:
    VUE_APP_TEST=test yarn dev (зависит от текущей ОС)
    И в приложении смотрим в process.env.VUE_APP_TEST
    Ответ написан
    Комментировать
  • Возможно ли использовать flex-wrap с жестким контейнером?

    @slide13
    frontend/web-developer
    Тут 2 варианта:
    1. Использовать гриды
    2. Обернуть фиксированный контейнер еще в один флекс контейнер, но уже без фиксированной ширины.
    Например, вот так

    Т.е. в этом случае section будет флекс контейнером во всю ширину, а wrap-list уже фиксированный контейнер.
    Ответ написан
  • Как изменить названия месяцев в material-ui pickers DatePicker?

    @slide13
    frontend/web-developer
    Чтобы все названия месяцев при использовании date-fns были в именительном падеже необходимо убрать из локали форматированные названия месяцев (т.е. formattingMonthValues).

    Для этого либо:
    1. Создаем отдельный файл с локалью, копируем в него все из имеющейся в date-fns ru локали. С помощью buildLocalizeFn перезаписываем месяцы и импортируем везде, где нужно этот файл вместо локали из date-fns/locale/ru.

    Код для измененной ru локали без форматированных месяцев:

    import formatDistance from "date-fns/locale/ru/_lib/formatDistance";
    import formatRelative from "date-fns/locale/ru/_lib/formatRelative";
    import localize from "date-fns/locale/ru/_lib/localize";
    import match from "date-fns/locale/ru/_lib/match";
    import formatLong from "date-fns/locale/ru/_lib/formatLong";
    import buildLocalizeFn from 'date-fns/locale/_lib/buildLocalizeFn'
    
    const monthValues = {
      narrow: ["Я", "Ф", "М", "А", "М", "И", "И", "А", "С", "О", "Н", "Д"],
      abbreviated: [
        "янв.",
        "фев.",
        "март",
        "апр.",
        "май",
        "июнь",
        "июль",
        "авг.",
        "сент.",
        "окт.",
        "нояб.",
        "дек."
      ],
      wide: [
        "январь",
        "февраль",
        "март",
        "апрель",
        "май",
        "июнь",
        "июль",
        "август",
        "сентябрь",
        "октябрь",
        "ноябрь",
        "декабрь"
      ]
    };
    
    const ruLocale = {
      formatDistance,
      formatLong,
      formatRelative,
      localize: {
        ...localize,
        month: buildLocalizeFn({
          values: monthValues,
          defaultWidth: "wide",
          defaultFormattingWidth: "wide"
        })
      },
      match,
      options: {
        weekStartsOn: 1,
        firstWeekContainsDate: 1
      }
    };
    
    export default ruLocale;


    2. Перезаписываем нужные месяцы в имеющейся локали напрямую после импорта

    import ru from "date-fns/locale/ru";
    import buildLocalizeFn from 'date-fns/locale/_lib/buildLocalizeFn'
      
      const monthValues = {
        narrow: ["Я", "Ф", "М", "А", "М", "И", "И", "А", "С", "О", "Н", "Д"],
        abbreviated: [
          "янв.",
          "фев.",
          "март",
          "апр.",
          "май",
          "июнь",
          "июль",
          "авг.",
          "сент.",
          "окт.",
          "нояб.",
          "дек."
        ],
        wide: [
          "январь",
          "февраль",
          "март",
          "апрель",
          "май",
          "июнь",
          "июль",
          "август",
          "сентябрь",
          "октябрь",
          "ноябрь",
          "декабрь"
        ]
      };
    
      ru.localize.month = buildLocalizeFn({
        values: monthValues,
        defaultWidth: 'wide',
        defaultFormattingWidth: 'wide'
      })
    Ответ написан
    1 комментарий
  • Как создать определенное расстояние между горизонтальными блоками div и чтобы при этом они были посередине и центральный блок не сдвигался?

    @slide13
    frontend/web-developer
    1. Не давайте разные названия css классов для совершенно одинаковых элементов.
    2. Забудьте про display: table и никогда его больше не используйте.

    Такие вещи просто делаются на flexbox, если сомневаетесь в поддержке - https://caniuse.com/#search=Flexible%20Box

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

    Ответ написан
    Комментировать