Задать вопрос
  • Почему не выводятся звёзды на Fragment с Telegram бота?

    IwanQ
    @IwanQ Автор вопроса
    Плохие времена часто дают прекрасные возможности
    Если вдруг кто-то столкнётся с похожей проблемой. Пробовал многое. Помогло одно — покупка подписки Telegram Premium на аккаунт, который является владельцем бота. После этого вывод прошёл успешно.

    UPD: Видимо, дело не в подписке Telegram Premium. Я купил её для теста вывода и он сработал. Но я также указал не всю сумму для вывода с баланса. Сейчас я опять попробовал вывести всё и ошибка повторилась. Как вариант решения для тех, кто столкнется с данной проблемой — выводите сумму частями. Это должно сработать. В поддержку писал по всем каналам. Результата ноль.

    UPD2: Поступил ответ от поддержи Telegram ботов: "Здравствуйте. Иногда возникают временные проблемы с выводом средств. Во всех известных нам случаях вывод средств проходил успешно через некоторое время. К сожалению, у нас нет более простого решения, кроме как периодически повторять попытку " (переведено).

    UPD3: На данный момент всё выводится корректно.

    69941457694f8403272683.png
    Ответ написан
  • "nginx: [warn] conflicting server name" - как исправить?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    В моем случае я через certbot пытался добавить ssl для домена, который не был указан в директории sites-available. Certbot автоматически добавил его в /etc/nginx/sites-available/default. Я об этом не знал и добавил домен в отдельном конфиге, после чего получил эту ошибку nginx: [warn] conflicting server name.

    Решение: убрал весь блок server {} из /etc/nginx/sites-available/default для этого домена и перезапустил nginx. Всё заработало корректно.
    Ответ написан
    Комментировать
  • Как исправить проблему с require в nuxt?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    require(`@/uploads/${this.song.file}`).default
    Ответ написан
    Комментировать
  • Как реализовать глобальный event в Socket.IO версии 4?

    IwanQ
    @IwanQ Автор вопроса
    Плохие времена часто дают прекрасные возможности
    io.engine.on('globalEvent', () => {
      // handler
    });
    
    // trigger
    io.engine.emit('globalEvent', 'some data');
    Ответ написан
    Комментировать
  • Как убрать предупреждение?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    useEffect(() => {
      let stopGettingAfterUnmount = false;
    
      const getTodo = async () => {
        await axios
          .get("/api/todo", {
            headers: {
              "Content-Type": "application/json",
            },
            params: { userId },
          })
          .then((response) => {
            if (stopGettingAfterUnmount) return;
    
            setTodos(response.data);
          });
      };
    
      getTodo();
    
      return () => {
        stopGettingAfterUnmount = true;
      };
    }, [userId]);
    Ответ написан
    Комментировать
  • Как убрать автозаполнение input?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    autocomplete="off"?
    Ответ написан
  • Почему данные меняются в двух стейтах одновременно?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    const copyArray = (array = []) => JSON.parse(JSON.stringify(array));
    
    const [contacts, setContacts] = useState(copyArray(data));
    const [contactsInput, setContactsInput] = useState(copyArray(data));


    [...data] - это разворачивание массива. В данном случае оно бесполезно, потому что это массив не примитивов. Объекты копируются по ссылке, а не по значению.

    Если бы в массиве были значения в виде примитивов, это бы сработало.

    Я предложил самый простой способ, но вообще это не оптимально по производительности. Лучше делать это с помощью метода cloneDeep из библиотеки lodash.
    Ответ написан
    1 комментарий
  • Как использовать разные пути до изображений на разных медиа запросах в nextjs?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Нативного решения от next для вашего вопроса на данный момент нет. Самый банальный вариант делать это вручную:

    const getSpecificImage = (breakpoint) => {
      switch (breakpoint) {
        case 1200:
          return <Image src="https://google.com?v=1200" />;
    
        case 600:
          return <Image src="https://google.com?v=600" />;
    
         default:
          return <Image src="https://google.com?v=default" />;
      }
    };
    
    const breakpoint = window?.innerWidth;
    
    const imageElement = getImageSpecificImage(breakpoint);
    
    return (
      <>
        {imageElement}
      </>
    );
    Ответ написан
    Комментировать
  • Как вывести айди?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Ответ написан
    Комментировать
  • Какие есть зарубежные сервисы приёма донатов?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    streamlabs.com
    Ответ написан
    Комментировать
  • Как сделать открытие js скрипта только при определенном значении в урл?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    https://google.com?script=true

    const params = (new URL(document.location)).searchParams;
    const shouldLoadScript = params.get('script'); // 'true'
    
    if (shouldLoadScript) {
      const script = document.createElement('script');
      script.src = 'https://url.com/script.js';
      document.head.append(script)
    }
    Ответ написан
    Комментировать
  • Как оптимизировать фукцию next.js?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Вообще есть такая проблемка в Next, что нет оптимального способа зафетчить что-то один раз, например глобальные настройки, и потом использовать это в приложении. Наиболее близким вариантом решения было-бы использовать getStaticProps в _app, но по некоторым причинам это на данный момент не возможно.

    Один из разработчиков Next предлагает следующие решения:

    • I want to fetch data once, and only once, until the next build, globally for my entire application. Solution
    • I want to share a layout between pages, while persisting React state to allow nested layouts. Solution
    • Finally, of course, you can create a shared function fetching your data and use it inside getStaticProps for every page


    Как по мне, именно для вашей задачи стоило-бы использовать этот вариант
    Ответ написан
    Комментировать
  • Как организовать SSR в React.js для отдельных компонентов на странице?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    По поводу отдельных SSR страниц не могу подсказать, но для создания SSR есть 2 основных фреймворка -
    Next и Gatsby. Первый более популярный. Next используют часто крупные игроки, например tiktok
    Ответ написан
    Комментировать
  • Почему свойства props компонента is not defined?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Ошибка list is not defined связана с тем, что функция для фетчинга данных getStaticProps не работает за пределами папки /pages.

    Вы можете фетчить только на страницах находящихся в /pages
    Если вы вынесли компонент в отдельную папку, например /components/pages/MainPage и там пытаетесь использовать getStaticProps - эффекта не будет.

    Из доков:
    getStaticProps can only be exported from a page. You can’t export it from non-page files.


    Решение:
    Перенести функцию getStaticProps на страницу в папке /pages, а уже далее передавать пропсы в нужный компонент
    Ответ написан
    1 комментарий
  • Как сохранять состояние открыта ли или закрыта боковая панель с помощью localstorage?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Не тестил, но должно воркать

    const TaskRegionView = () => {
        const isMenuOpenLocalStorageKey = '__isMenuOpen';
      
        const [condition, setCondition] = useState(() => {
          const value = localStorage.getItem(isMenuOpenLocalStorageKey);
    
         const isOpen = JSON.parse(value);
          
          if (isOpen === null) return false;
          
          return value;
        });
    
        const handleToggleCondition = () => {
            setCondition((prev) => {
              const state = !prev;
              
              localStorage.setItem(isMenuOpenLocalStorageKey, JSON.stringify(state));
              
              return state;
            });
        };
    ...
    Ответ написан
    Комментировать
  • В каких случаях стоит использовать Next.js?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Нужно использовать в случаях, когда нужно SEO. Других особо значимых причин усложнять себе разработку не вижу
    Ответ написан
    Комментировать
  • Как в getServerSideProps nextjs получить даные из файла?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    const products = (await import("../../data/products")).default;
    Ответ написан
    1 комментарий
  • Как верстают сайты на React и Next?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    1.Верстка делается сразу в React компонентах? Или вначале делается классическая верстка, а потом переносится в React?
    Если проект разрабатывается с нуля, верстка сразу-же делается в компонентах. Если на React переносится уже готовый проект, классическую верстку делят на компоненты и просто переносят.

    2. Если сайт на React, там все должно быть на React или допускается сделать некоторые элементы на нативном Js?
    React использует концепцию virtual dom, поэтому нативные js элементы (const div = createElement('div')) не допускаются. Но есть похожий способ создания элементов без синтаксиса jsx (https://ru.reactjs.org/docs/react-without-jsx.html). Если React встраивается на уже готовый сайт частично, то часть сайта может быть спокойно на нативном JS, а другая на React.
    Ответ написан
    Комментировать
  • Как правильно обработать событие onsubmit?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    Какая у вас задача? Если отменить отправку формы, то нужно отменить стандартное поведение браузера.

    function updateForm(event){
        event.preventDefault();
    }


    Мне к счастью не приходилось js в html писать, но могу предположить, что return лишние. Можно обойтись:
    <form action="" onsubmit="updateForm()" method="post">
    Ответ написан
    Комментировать
  • Как сделать такой импорт файлов?

    IwanQ
    @IwanQ
    Плохие времена часто дают прекрасные возможности
    1. Создаешь index.js в public/locales

    2. В index.js импортируешь нужные локали
    import en from 'path/to/en';
    import ru from 'path/to/ru';


    3. Экспроктируешь в виде объекта
    export {
        en,
        ru,
    }


    4. Готово
    Ответ написан
    3 комментария