javascript - 是否可以在 next.js 中定义哈希路由?
问题描述
我已经制作了一个模态组件,其中<HashRouter>
inreact-router
使用哈希 url 变得活跃和不活跃,即当 url 为时模式是不活动的,当 url 是/route
时modal1
是活跃的/route#modal1
。有什么方法可以在 next.js 中定义哈希路由?
解决方案
以哈希符号(标识 html 实体)开头的 url 部分永远不会发送到服务器,因此您无法匹配 url 服务器端(如果浏览器加载/route#modal1
服务器将加载/route
)您可以做的是:
选项1处理模态渲染客户端,next/router
在您的组件中使用类似这样的东西:(
我假设您正在使用类组件)
import Router from 'next/router'
....
componentDidMount(){
let id = Router.asPath.match(/#([a-z0-9]+)/gi )
if(id){
// i will show the modal
}else{
// something else
}
}
选项 2将 id 传递给不带#
.
在您server.js
添加类似于此的路线:
server.get('/route/:id?', (req, res) => {
let {id} = req.params
return app.render(req, res, '/mypage', { id})
})
然后抓住身份证,例如。在getInitialProps
static async getInitialProps (context) {
let ctx = context.query;
return ctx
}
并处理模态
componentDidMount(){
let {id} = this.props
if(id){
// i will show the modal
}else{
// something else
}
}
推荐阅读
- rust - 有没有办法 `f64::from(0.23_f32)` 并获得 0.23_f64?
- vim - vim 去掉行号下划线
- javascript - ShadyCSS polyfill 无法正确处理 Edge 中的 CSS
- r - 如何使用 R 客户端连接到 Docker Influxdb?
- pandas - 根据值获取列索引标签
- amazon-web-services - AWS Python 3.7 Lambda 使用 boto3:workmailmessageflow - UnknownServiceError
- python - Bokeh 是否允许节点成为 Networkx 中的“任何可散列对象”?
- javascript - jquery 查找所有具有类的元素并返回单击元素的计数位置
- vba - 多个布尔语句 VBA
- sql - SQL 查询以选择第二次出现