我正在尝试实现一种启用“覆盖”页面的路由样式 - 一个出现在上一页顶部的模式窗口(由于覆盖是半透明的,所以仍然可见),但确实更改了 url。这种风格的一个很好的例子是 Product Hunt 的主页。
我之前找到了一个解决方案,方法是在 Switch 外部渲染覆盖层的 Route,然后将路径与链接源进行匹配(它将仅从两个不同的视图进行可预测的链接)。这非常有效。
它看起来像这样:
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/search" component={Search} />
<Route exact path="/:category" component={Category} />
<Route exact path="/:category/:id" component={Category} /> // this matches when overlay is active
</Switch>
<Route exact path="/:category/:id" component={Overlay} />
Run Code Online (Sandbox Code Playgroud)
然而现在,覆盖层可以从搜索页面显示,并且单击搜索结果将更改底层视图,理想情况下它会保持原状,以防用户关闭覆盖层或使用后退按钮。
这使我重新考虑我的实施。我现在使用 React Context 来控制覆盖层,而不是直接使用<Link>s 来控制覆盖层的显示,这使得 url 在挂载时发生变化。目前,这会创建与以前相同的行为,但我想知道是否可以做任何事情来“保存”之前的 url,然后使用它来控制组件<Switch>呈现的内容?
如果有人对这种行为有任何意见或经验,我们将不胜感激。如果我找到一个好的解决方案,我一定会带着我的解决方案回来。
我正在使用使用Passport进行身份验证的React Starter Kit制作应用程序.我正处于现阶段,我正在尝试访问前端的req.user对象,但是我无法将该req.user对象传递到React/ES6环境中.
我试图将对象作为a prop和as 传递context,但无济于事.此时,我决定创建一个API端点,我可以将req.user的值作为JSON req.user返回undefined,但是尽管它正常工作,但仍然返回get('*').
这是我做的GET调用,即返回undefined:
server.get('/user', (req, res) => {
console.info('user: ', req.user);
});
Run Code Online (Sandbox Code Playgroud)
而
server.get('*', async (req, res, next) => {
console.info('*: ', req.user);
// ... the rest of the React Starter Kit rendering code
Run Code Online (Sandbox Code Playgroud)
确实会返回一个对象req.user,这让我感到困惑.护照会议是否仅限于某些网址或其他内容?
中间件:
server.use(express.static(path.join(__dirname, 'public')));
server.use(cookieParser());
server.use(session({
secret: 'keyboard cat',
cookie: { httpOnly: false },
resave: true,
saveUninitialized: true,
}));
server.use(passport.initialize());
server.use(passport.session());
Run Code Online (Sandbox Code Playgroud)
序列化/反序列化就像它们得到的一样简单:
passport.serializeUser((user, done) => {
console.log('serializeUser'); …Run Code Online (Sandbox Code Playgroud)