next js Router.back выполняет полное обновление страницы - PullRequest
0 голосов
/ 04 мая 2020

У меня есть страница: pages/conversations/[id].tsx, которая имеет:

import Router, { useRouter } from 'next/router'

export default function ConversationPage() {
    const router = useRouter()
    ...
    return (
        <View style={{ flex: 1, bottom: 0 }}>
            <Appbar.Header style={{ zIndex: 10, elevation: 10}}>
                <Appbar.BackAction onPress={() => router.back()} />
                <Appbar.Content
                    title={' '}
                />
   ...

Когда я нажимаю на нее, она перезагружает всю страницу и стирает информацию о состоянии. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Чтобы отслеживать предыдущий URL, вы можете использовать поле referer в req.headers из объекта req в getIntialProps или getServerSideProps.

Пример ответа заголовка в следующем js getInitialProps

headers: {
    host: 'localhost:3000',
    connection: 'keep-alive',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'sec-fetch-dest': 'document',
    referer: 'http://localhost:3000/questions',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'en-US,en;q=0.9',
    cookie: '_ga=GA1.1.20509028897'
  },
1 голос
/ 04 мая 2020

Надеюсь, это поможет при поиске решения.

Далее JS router.back () вызывает только собственный window.history.back ()

Вот исходный код https://github.com/zeit/next.js/blob/d21603707edfaab292cb3190881efda9a07195cd/lib/router/router.js#L138

Может быть, вам следует использовать Router.pu sh () косвенно для go назад, используя параметр as?

<</p>

<span onClick={() => Router.push('/post/[pid]', '/post/abc')}>
      Click me
</span> 

Вот из документации

https://nextjs.org/docs/routing/introduction#linking между страницами https://nextjs.org/docs/api-reference/next/router#usage

При связывании маршрута с динамическими сегментами пути c необходимо указать href и убедиться, что маршрутизатор знает, какой файл JavaScript загрузить.

...