@kirill-93

SSR данные, которые зависят от localStorage?

Заголовки на сайте показываются на двух языках. Язык хранится в localStorage, соответственно на сервере просто генерируется английский (по умолчанию). В результате, у пользователей, у которых установлен русский язык, с сервера приходит английский текст, а затем в браузере переключается. Это все происходит за долю секунды и очень некрасиво дергается.
Как правильно обрабатывать такие ситуации? Первое, что приходит в голову - хранить не в localStorage, а в куках, но может есть другие варианты?
Я вот видел, как на сайтах (на youtube в том числе) при загрузке страницы вместо текстов и вообще вместо всех элементов, показываются серые прямоугольники, которые затем заменяются данными. Что это такое? Как это работает?
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 3
rockon404
@rockon404
Frontend Developer
Используйте cookie. Напишите две обертки для работы с cookie на стороне клиента и сервера с идентичным интерфейсом и создавайте инстансы в соответствующих точках входа. Так можно будет использовать один и тот же код использующий cookie на сервере и клиенте.
Что-то вроде:
interface AppStorage {
  get: (key: string) => any;
  set: (key: string, value: any, options: any) => void;
  delete: (key: string) => void;
}
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Это серые прямоугольники (span'ы/div'ы с серым background-color), которые показываются, пока сайт тянет данные аяксом. Надо понимать, что в этом случае преимущества SSR практически сводятся к нулю, показать заглушки можно и без сервера.
Ответ написан
@nvdfxx
Senior Pomidor developer
Чем вариант с куками не нравится? Это, наверное, единственный вариант, если вы SSR для SEO юзаете, вам же нужно индексировать тексты и для других языков?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Digital Sharks Казань
от 60 000 до 65 000 руб.
CS Money Санкт-Петербург
от 120 000 до 150 000 руб.
Ingram Micro Cloud Москва
от 170 000 руб.