Задать вопрос
  • Как сравнить значение с ключом объекта?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Твой index - и есть в данном случае ключ. Т.е. проверять нужно просто index === 'dateTime'.

    Опережая возможный вопрос - если тебе нужен именно цифровой индекс, то в случае с объектом на входе он будет третьим параметром:v-for="(filter, key, index) in filters". Однако в твоём случае он не нужен, т.к. лучше привязывать key именно к ключу.

    В vue всё для людей.)
    Ответ написан
    1 комментарий
  • После отключения правила eslint ругается prettier, как предотвартить?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    prettier - это одно, eslint - это другое, если у тебя prettier подключается через eslint, то настройки для него указываются скопом, условно так:
    rules: {
        'prettier/prettier': ['warn', {
          semi: false,
          ...
          singleQuote: true,
          vueIndentScriptAndStyle: true,
          arrowParens: 'avoid',
          trailingComma: 'none',
          quoteProps: 'consistent',
        }],
    Ответ написан
    Комментировать
  • Как резольвить алиасы у скаченного через package.json репозитория?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Очевидно что пакет битый или ты подключаешь что-то не то.
    В готовой либе никаких алиасов быть не должно, на то она и готовая.

    Можно что-то нашаманить, но в каждом конкретном случае своё, потому что в любом случае через жопу.
    Ответ написан
    Комментировать
  • Как не дублировать компонент с похожими данными?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    const options = computed(() => {
      if (props.secondType) 
        return props.secondTypeItems.map(({ id, value}) => ({
          label: value,
          value: id 
        }));
    
      if (props.thirdType) 
        return props.thirdTypeEvents.map(({ desc, name }) => ({
          label: name,
          value: desc 
        }));
    
      // ...
    
      return [];
    });


    <el-select
          v-model="modelText"
          placeholder="Выберите предмет"
          @change="changeVal"
        >
          <el-option
            v-for="{ label, value} in options"
            :key="value"
            :label="label"
            :value="value"
          >
            {{ label }}
          </el-option>
        </el-select>
    Ответ написан
    Комментировать
  • Почему во Vue3 не срабатывает computed, когда меняется ref?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Во первых:
    import { computed, ref } from "vue";

    Во-вторых:
    <Input type="number" :value="count" @change="changeCount"/>


    Дальше при нормальных данных и компонентах должно работать, однако возможно энтот твой Input в change возвращает не значение, а event, тут хз сам смотри.
    Ответ написан
    3 комментария
  • Почему на разных версиях ноды по разному устанавливаются зависимости?

    Aetae
    @Aetae
    Тлен
    Скорее всего дело в либах которые требуют бинарников, а не только чистого js: такие либы сильно зависят как от версии ноды так и от окружения, и имеют готовые бинарники под какие-то популярные(или старые) версии. Если готовых бинарников под версию ноды\окружение нет - он будет пытаться оные собрать, но для этого нужно много всякого мусора и подготовки, потому оно скорее крашнется чем соберётся.)
    Ответ написан
    Комментировать
  • Какая лучшая практика организации css в проекте react?

    Aetae
    @Aetae
    Тлен
    Можно использовать css-modules.
    Можно оставить твой подход, просто пользоваться БЭМ и scss, называя корневой класс по имени компонента(тогда конфликтов никаких не будет).
    Решения css-in-js типа styled - популярны, но как по мне - ересь и грязь.
    Ответ написан
    Комментировать
  • Почему сервер получает пустые данные?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Откуда ты эту хрень взял?
    axios.post('http://localhost:5000/api/create-post', () => {
      body: data
    })
    Во-первых: axios принимает параметром объект, а не функцию возвращающую объект.
    Во-вторых: axios.post вообще сразу принимает body:
    axios.post('http://localhost:5000/api/create-post', data)

    В-третьих: даже если бы оно принимало функцию(что не так) - конструкция
    () => {
      body: data
    }
    на самом деле расшифровывается так:
    () => { // начало блока кода
      // метка body указывающий на висящую в воздухе переменную data
      body: data
      // никакого возврата из функции
    } // конец блока кода
    чтобы оно воспринималось как объект, можно, например, заключать в скобки:
    () => ({
      body: data
    })
    Ответ написан
    5 комментариев
  • Можно ли программно отрендерить vue компонент передав шаблон и параметры?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Vue работает с DOM, а не со строковым представлением.
    Тупо смонтируй компонент в скрытый div и забери из него innerHTML.

    Условно:
    // версия с рантайм компилятором шаблонов
    import { createApp } from 'vue/dist/vue.esm-bundler.js'; 
    
    function renderVueComponent(template, data) {
      const div = document.createElement('div');
      
      createApp({
        template,
        data: () => data
      }).mount(div);
    
      return div.innerHTML;
    }
    Ответ написан
    Комментировать
  • Как правильно объединить два типа HTMLElement?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Ответ Александр хорошо работает если есть дискриминатор (в приведённом примере поле type).

    Если же такого уникального поля нет, то конкретно для React можно сделать на перегрузках, условно:
    type ExtraProps = {
      size?: 's' | 'm' | 'l';
    }
    
    type AnchorProps = ExtraProps & {href: string};
    type ButtonProps = ExtraProps & {type: string};
    
    function TappableComponent(props: AnchorProps ): ReactNode; 
    function TappableComponent(props: ButtonProps ): ReactNode;
    function TappableComponent(props: AnchorProps | ButtonProps ) {
         const Component = 'href' in props ? 'a' : 'button';
         return <Component>...</Component>
    }

    Там множество подводных камней, но иногда удобно.
    Ответ написан
    Комментировать
  • TypeScript ругается на getAttribute('href'). Как получить href ссылки?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Ради ускорения сборки из коробки не предусмотрено сложной типизации событий. Одно время события имели сложную типизацию на дженериках, но оную вкинули из ts. (Что весьма меня расстраивает, могли бы и оставить как отдельную настройку, для тех кому плавная типизация важнее скорости.)

    Тебе остаётся только кастовать типы руками, увы. Причём рекомендую в данном случае использовать currentTarget а не target, потому что target может оказаться например span внутри этой ссылки, а не она сама.
    Ответ написан
  • Типизировать src,The expected type comes from property 'src' which is declared here on type?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Ответ на твой вопрос на самом деле зависит от того, что за говно у тебя в cartEmptyImg.
    Т.к. голый js не умеет в принципе импортировать что-то кроме js модулей - это полностью зависит от твоей конфигурации загрузчиков и настроек, о которых в вопросе не сказано ни слова.
    Даже хотя-бы полный текст ошибки частично пролил бы свет на этот вопрос, но конечно же "лишняя" информация в вопросе не нужна, да.

    В целом тут может быть несколько вариантов:
    1. Используется простой загрузчик, который в импорт подставит простой url или data uri, тогда у тебя хреново настроен тип для png: должен быть где-то файлик условно вида:
    png.d.ts
    declare module '*.png' {
      const png: string;
      export default png;
    }

    2. Используется какая-то более продвинутая хрень(генератор спрайтов, генератор react-копонентов, и т.д.). Тут уж сам смотри что там и куда это что-то надо пихать, потому как без инфы тут можно только гадать на кофейной гуще.
    Ответ написан
  • От чего всплывает ошибка в скрипте при подключении в functions.php?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Вот что тебе не понятно в ошибке?
    Он тебе пишет "не могу прочитать appendChild у null".
    Включаем голову и глаза на ней: откуда он хочет прочитать appendChild в данном месте?
    Из document.body, так?
    В каком случае document.body === null?
    Очевидно, когда никакого body нет на странице.
    Когда body нет на странице?
    В тот момент когда кусок разметки с body ещё не прочитан.
    Когда такое возможно?
    Когда скрипт выполняется в head и не ждёт загрузки документа.

    Из этого можно сделать вывод, что раньше ты пихал скрипт внутрь body и всё работало, а сейчас wp подключает его в head, как принято.
    Соответственно, тебе либо надо найти как пихать скрипт в body в wp, либо, что лучше, дожидаться в скрипте загрузки документа(DOMContentLoaded).
    Ответ написан
    Комментировать
  • Можно ли зайти локально в своей сети в проэкт vite?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    https://vitejs.dev/config/server-options.html#serv...
    Буквально первый параметр сервера в vite.
    Ответ написан
    Комментировать
  • Как изменить все даты в базе данных Wordpress?

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

    Aetae
    @Aetae Автор вопроса, куратор тега TypeScript
    Тлен
    И вот в ts 4.9 наконец-то ввели фичу отвечающую на этот вопрос (буквально джва года ждал):
    interface Some {
      value: string | string[];
    }
    
    const foo = {
      value: ['a', 'b'] // здесь всегда будет массив
    } satisfies Some;
    
    foo.value.map(() => {}); // ок
    Ответ написан
    Комментировать
  • Есть ли возможность поставить на сайт определенный стиль эмодзи?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Эмодзи - часть юникода(будь прокляты те, кто это придумал), а значит часть шрифта. Просто заставь юзеров подгружать нужный тебе шрифт с нужным видом эмодзи. Если его поставить в конец списка, то первыми можно использовать любые иные(без встроенных эмодзи).
    Ответ написан
  • Применение двух стилей к одному значению массива js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    По-хорошему - делаешь ещё один массив(через usememo) с уже разложенным как надо значениями и уже с ним работаешь.
    Но в целом substring каждый рендер даёт пренебрежимо мизерные накладные расходы, а вся идея React: "хреначь сейчас, оптимизируй потом(никогда)", так что делай как хочешь.)
    Ответ написан
    Комментировать
  • Поле current у ref перезаписывается, как этого избежать?

    Aetae
    @Aetae
    Тлен
    В качестве рефа для DOM элемента можно указать функцию(“callback refs”), а уж из этой функции прописать поле в реф.
    Ответ написан
    Комментировать
  • Как правильно типизировать аругменты?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    const someFunc = <
      FK extends keyof FormDataType, 
      SK extends keyof FormDataType[FK]
    >(
    	firstKey: FK, 
    	secondKey: SK
    ) => {
      ...
    }
    Ответ написан
    Комментировать