Возможно ли условно управлять isAmp через сервер?

#next.js #amp-html

#next.js #amp-html

Вопрос:

ОБНОВЛЕНИЕ: Я перефразирую свой вопрос, поскольку он недостаточно ясен. Чего я хочу достичь здесь, так это передать isAmp из getInitialProps компоненту, чтобы определить, будет ли это усилитель или обычный.

Почему я хочу это сделать? Потому что я хочу выполнить некоторые клиентские операции, если страница загружает удаленный элемент; поскольку amp все выполняется на сервере, я не могу использовать перехватчики реакции или перенаправить страницу через 10 секунд. Надеюсь, это объясняет лучше.

У меня есть страница amp, которую я хочу превратить в обычную страницу, когда статус элемента (href =»page / ItemId») удаляется, чтобы я мог использовать клиентскую сторону для перенаправления пользователя через 10 секунд.

Чтобы создать усилитель страницы, мы просто добавляем этот экспорт в начало файла

 export const config = { amp: true };
  

Режим, который меня интересует, — это «гибридный» режим.
Есть ли способ передать значение isAmp через сервер, а затем клиенту, как это делает следующий хук

 const isAmp = useAmp();
  

Я хочу, чтобы значение передавалось прямо в первую строку кода выше:

 export const config = { amp: isAmp };
  

Я прохожу через этот процесс, чтобы заставить работать код на стороне клиента, например перенаправлять страницу на другой URL. Который работает только на страницах, отличных от amp.

Комментарии:

1. Омар, я читал это несколько раз и понятия не имею, о чем ты спрашиваешь.

2. @JayGray Извините за это. Я хотел сказать, что я хочу передать isAmp из gitInitialProps в компонент, чтобы контролировать, является ли страница amp или нет.

Ответ №1:

Из документа вам не разрешено выполнять динамическую / условную настройку страницы.

это недопустимо:

 const test= somecondition ? true : 'hybrid'

export const config = {
    amp: test
}
  

смотрите здесь:
https://nextjs.org/docs/messages/invalid-page-config

Ответ №2:

Как сказано в документации, используйте hybrid режим.

 import {useAmp} from 'next/amp'

export const config = {amp: 'hybrid'} // Hybrid mode

function About(props) {
  const isAmp = useAmp()

  return (
    <div>
      <h3>My AMP About Page!</h3>
      {isAmp ? (
        <amp-img
          width="300"
          height="300"
          src="/my-img.jpg"
          alt="a cool image"
          layout="responsive"
        />
      ) : (
        <img width="300" height="300" src="/my-img.jpg" alt="a cool image" />
      )}
    </div>
  )
}

export default About
  

Комментарии:

1. Мое объяснение может быть неправильным, но я хотел сказать, что я хочу передать isAmp из gitInitialProps в компонент, чтобы контролировать, является ли страница amp или нет.

2. Также гибридный режим делает страницу, отличную от amp, по умолчанию, если не добавить ?amp= 1 к uri. В моем случае я хочу сохранить значение по умолчанию как AMP, но контролировать, когда показывать его версию, отличную от amp.