• Сборка build открывается на хостинге с ошибками в консоли, на localhost все работает, в чем может быть проблема?

    @ludvigruno
    Фулстэк-разработчик
    Скорее всего, ошибка из-за несовместимости версий библиотек или неправильного импорта. Проверь, чтобы версия React, ReactDOM и зависимостей, вроде ReactIdSwiper, совпадала с тем, что требует библиотека. Также убедись, что импорт сделан правильно — бывает, вместо default берут через {} или наоборот.

    Попробуй удалить node_modules, переустановить зависимости и пересобрать проект. Иногда проблема может быть в старом кэше — его тоже стоит почистить. Если используешь Babel, проверь, что он поддерживает нужный синтаксис.
    Ответ написан
  • Почему данные не подгружаются в форму?

    @ludvigruno
    Фулстэк-разработчик
    У тебя проблема связана с гидратацией — это когда серверный HTML отличается от клиентского из-за того, что данные из localStorage подгружаются уже после рендера.

    Вот как это можно обойти:

    1. Вариант с useEffect остаётся нормальным. Ты просто сначала задаёшь дефолтное состояние, а потом в useEffect подтягиваешь данные из localStorage. Да, данные сначала будут пустыми, но зато не будет ошибки гидратации.

    const [dataForm, setDataForm] = useState<IDataForm>({
      lastName: '',
      firstName: '',
      middleName: '',
      dateOfBirth: '',
      numberPhone: '',
      email: '',
      amount: 1000,
      term: 5,
      checkbox: false,
    });
    
    useEffect(() => {
      const storedData = getStoredData<IDataForm>(StorageKeys.GENERAL_INFO);
      if (storedData) {
        setDataForm(storedData);
      }
    }, []);

    Если критично, чтобы форма не показывалась до загрузки данных, то просто добавь условие:

    if (!dataForm) {
      return null; // можно спиннер или что-то такое показать
    }

    2. Если хочешь, чтобы данные подгружались сразу без лишнего рендера, то данные надо либо уже отдавать с сервера (например, через getServerSideProps, если у тебя Next.js), либо хардкодить их в начальное состояние, но это не всегда удобно.

    3. Ещё вариант — проверить на клиентской стороне. Например:

    const [isClient, setIsClient] = useState(false);
    
    useEffect(() => {
      setIsClient(true);
    }, []);
    
    if (!isClient) return null; // или показывай что-то временное
    
    return (
      <YourFormComponent dataForm={dataForm} />
    );

    Этот способ тоже рабочий и позволяет избежать ошибки гидратации. В общем, всё сводится к тому, чтобы подгружать данные только после того, как React знает, что он на клиенте, и не пытаться смешивать логику клиента и сервера.
    Ответ написан
    Комментировать
  • Почему Google и Yandex не распознают favicon и description?

    @ludvigruno
    Фулстэк-разработчик
    Скорее всего, у тебя два разных нюанса.

    С Google понятно — он часто игнорит и берет кусок текста со страницы, который, по его мнению, лучше подходит под запрос. Это нормальная практика, ничего с этим не сделаешь. Проверь, чтобы description вообще был в и имел нормальную длину (около 150-160 символов), без ошибок в коде. Если всё ок, то просто забей — у Google свои алгоритмы, иногда они видят текст так, как нам не нравится.

    С Яндексом и favicon сложнее. SVG — не лучший выбор для favicon, у Яндекса он может некорректно отображаться. То, что ты сменил формат на .ico, правильно, но обновления в поиске требуют времени (до нескольких недель). Проверь, чтобы файл был доступен по адресу /favicon.ico, и в была прописана ссылка вроде:

    <link rel="icon" type="image/x-icon" href="/favicon.ico">


    Если не видишь изменений, можно попробовать проверить всё через Яндекс.Вебмастер — там видно, как бот видит сайт.

    Кстати, обновление favicon может зависеть от кеша как в браузерах, так и у самих поисковиков. Иногда помогает, если поменять имя файла (например, /favicon-v2.ico).

    В общем, просто жди — скорее всего, через пару апдейтов Яндекс всё подтянет.
    Ответ написан
    1 комментарий