小编she*_*ock的帖子

使用 React Router 处理“覆盖页面”?

我正在尝试实现一种启用“覆盖”页面的路由样式 - 一个出现在上一页顶部的模式窗口(由于覆盖是半透明的,所以仍然可见),但确实更改了 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>呈现的内容?

如果有人对这种行为有任何意见或经验,我们将不胜感激。如果我找到一个好的解决方案,我一定会带着我的解决方案回来。

reactjs react-router react-router-v4

5
推荐指数
1
解决办法
4151
查看次数

在React(ES6)中访问Passport的req.user?API调用将req.user返回为undefined

我正在使用使用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)

javascript node.js express reactjs passport.js

2
推荐指数
1
解决办法
2011
查看次数