当前位置: 首页 > 知识库问答 >
问题:

为什么我的自定义管线没有传递到子组件的正确路径?

程沛
2023-03-14

我的App.js文件中有这些路线:

<LoggedInRoute userData={userData} path="/code/:id/view">
  <ViewCode />
</LoggedInRoute>
<LoggedInRoute userData={userData} path="/code/feed/:userId">
  <CodeFeed />
</LoggedInRoute>
// userData -> state representing user session info

这是我的LoggedInRoute组件:

import React from 'react';

import { Redirect, Route } from "react-router-dom";

function LoggedInRoute(props) {
  return (
    <Route
      render={({ location }) =>
        props.userData.id ? (
          props.children
        ) : (
          <Redirect
            to={{
              pathname: "/login",
              state: { from: location }
            }}
          />
        )
      }
    />
  );
}

export default LoggedInRoute;

我正在子组件ViewCode和CodeFeed中使用useParams()函数(来自react router dom)来生成额外的id和userId。现在的问题是,它们被提取为未定义的值。如果我使用Route而不是LoggedInRoute,一切正常。我的LoggedInRoute组件似乎没有将路径传递给子组件。我从useLocation()检查了location对象,以及它在子组件中的正确路径。我错过了什么?提前谢谢,伙计们:)

共有2个答案

澹台志诚
2023-03-14

您应该将道具散布到使用自定义道具包裹的管线组件上。

import { Redirect, Route } from "react-router-dom";

function LoggedInRoute(props) {
  return (
    <Route
      ...props
      render={({ location }) =>
        props.userData.id ? (
          props.children
        ) : (
          <Redirect
            to={{
              pathname: "/login",
              state: { from: location }
            }}
          />
        )
      }
    />
  );
}

export default LoggedInRoute;
夹谷浩博
2023-03-14

这解决了我的问题:

import React from 'react';

import { Redirect, Route } from "react-router-dom";

function LoggedInRoute(props) {
  return (
    <Route
      path={props.path}
      render={({ location }) =>
        props.userData.id ? (
          props.children
        ) : (
          <Redirect
            to={{
              pathname: "/login",
              state: { from: location }
            }}
          />
        )
      }
    />
  );
}

export default LoggedInRoute;

 类似资料:
  • 问题内容: 我正在使用ReactRouter创建一个多页面应用程序。我的主要组件是,它呈现了所有到子组件的路由。我正在尝试通过路线传递道具,根据我所做的一些研究,子组件利用最常见的方式来挖掘传递下来的道具是通过它们继承的对象。但是,这个对象对我来说是未定义的。在子组件的函数上,我和我返回了一个看起来像这样的对象 看起来根本不像我期望的道具。这是我的详细代码。 父组件(我试图在所有子组件中将“ hi

  • 我正在试图找到为什么我的下拉菜单(只有HTML,CSS)不工作的原因。我正在使用经典的:hover选项来更改显示:none;显示:flex;。我的目标是,当用户悬停在“Unsere Produkte”上时,会出现一个子菜单。在需要隐藏之前。如果有人能帮我,我会很高兴的。非常感谢。 null null

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火

  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG

  • 本文向大家介绍vue子组件使用自定义事件向父组件传递数据,包括了vue子组件使用自定义事件向父组件传递数据的使用技巧和注意事项,需要的朋友参考一下 使用v-on绑定自定义事件可以让子组件向父组件传递数据,用到了this.$emit(‘自定义的事件名称',传递给父组件的数据) @increment是子组件this.$emit('increment'自定义的事件,newValue)用来告诉父组件自己干

  • 问题内容: 我正在尝试将需要处理的文件数组传递给gulp.src。这就是它所代表的数组。 我发现虽然gulp.src似乎并不喜欢,并且第三个元素没有使其进入最终目标。 我发现当我引入一些通配符时,一切工作正常: 但为什么?与通配符的工作方式有关吗?我已经用谷歌搜索,但找不到。 也许这不是实现globbing的预期目的,但对我而言,以这种方式工作并不有意义。谁能给我一些启示? 问题答案: 当您传递完