#reactjs #next.js
#reactjs #next.js
Вопрос:
Проблема: в приложении react nextjs
- Если я перейду из http://localhost:3000 чтобы http://localhost:3000/p/hello используя ссылку.
- Обновите страницу.
- Нажмите кнопку «Назад»: она переходит к http://localhost:3000 но все же отображает содержимое http://localhost:3000/p/hello это не загрузка содержимого http://localhost:3000 .
Я использую «следующий»: «^ 8.1.0».
Ссылка для навигации
<div>
Click{' '}
<Link as={`/p/hello`} href={`/postDetails?title=hello`}>
<a>here</a>
</Link>
to read more
</div>
server.js :
const express = require('express')
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app
.prepare()
.then(() => {
const server = express()
server.get('/p/:id', (req, res) => {
const actualPage = '/postDetails'
const queryParams = { title: req.params.id }
app.render(req, res, actualPage, queryParams)
})
server.get('*', (req, res) => {
//app.render(req, res, '/', queryParams)
return handle(req, res)
})
server.listen(3000, err => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
.catch(ex => {
console.error(ex.stack)
process.exit(1)
})
Он должен загрузить index.js (localost:3000) содержимое, но оно показывает http://localhost:3000/p/hello содержание.
Ответ №1:
Эта проблема определенно не связана с кодом сервера. Это связано со следующим маршрутизатором, я бы рекомендовал вам сосредоточиться на маршрутизаторе.
Обязательно включите модуль
import Link from 'next/link';
А как насчет попытки без фигурных скобок
<div>
Click{' '}
<Link as='/p/hello' href='/postDetails?title=hello'>
<a>here</a>
</Link>
to read more
</div>
Если вы не можете решить эту проблему, взгляните на этот модуль npm next-routes
, который предоставляет различные варианты компоновки.
<Link route='postDetails' params={{title: 'hello'}}>
<a>Hello world</a>
</Link>
Ответ №2:
У нас была такая ошибка в нашем приложении более одного раза. Мы обнаружили, что это вызвано другим кодом (не ссылками), который касался истории браузера. В одном случае это было через replace
from useRouter()
, но оно было неправильно отформатировано. В другом случае это был код, который напрямую изменял историю браузера window.history
.
Я надеюсь, что это поможет любому, кто столкнется с такой ошибкой, знать, где искать.
Ответ №3:
Я думаю, вам может потребоваться добавить статическую папку, в которой находятся ваши общедоступные ресурсы (например, html, изображения, js):
server.use(express.static('public'))