Reactjs 通过React路由器传递值v4<;链接/>;

Reactjs 通过React路由器传递值v4<;链接/>;,reactjs,hyperlink,react-router,Reactjs,Hyperlink,React Router,问题:我如何通过React路由器的链接组件传递一个道具或单个值(如_id),并在端点捕获它 这就是我的意思:假设我们在第/a页。该链接将用户带到/b。因此。现在,我需要通过链接传递一个_id,从/a到/b <Link to='/b' params={_id}>blah blah</Link> 废话 我试图传递的id是链接组件嵌套在其中的对象的属性 我在另一个StackOverflow线程中发现了这个语法params={}。我的代码编译时没有中断,所以这可能意味着它工作

问题:我如何通过React路由器的链接组件传递一个道具或单个值(如_id),并在端点捕获它

这就是我的意思:假设我们在第/a页。该链接将用户带到/b。因此
。现在,我需要通过链接传递一个_id,从/a到/b

<Link to='/b' params={_id}>blah blah</Link>
废话
我试图传递的id是链接组件嵌套在其中的对象的属性

我在另一个StackOverflow线程中发现了这个语法
params={}
。我的代码编译时没有中断,所以这可能意味着它工作了?但是,我不确定如何在端点检索这个传递的值


非常感谢您的帮助。

要通过链接组件传递数据,您可能只需要接受实际链接上的参数

<Link to={`/b/${_id}`}>blah blah</Link>
废话
在路线上,你会设置这样的东西

然后,您可以通过
this.props.match.params.id


如果你真的不想让你的身份证出现在实际路线上,那就有点烦人了

传球道具

您可以通过
状态
对象将任意道具传递到路线:

<Link to={{ pathname: '/route', state: { foo: 'bar'} }}>My route</Link>
const {id} = props.match.params

console.log(id) // "foo"
传递参数

配置路由路径以接受命名参数(
:id
):

您可以通过
match
对象访问组件中的参数:

<Link to={{ pathname: '/route', state: { foo: 'bar'} }}>My route</Link>
const {id} = props.match.params

console.log(id) // "foo"
来源


如果要通过路由发送多个参数,可以这样做

1.链接元素

<Link to={`/exchangeClicked/${variable1} ,${variable2},${variable3}`} >Click
</Link>
点击
2.配置路由路径以接受这些参数

<Route
      exact
      path="/exchangeClicked/:variable1,:variable2,:variable3"
      component={MyComponent}
 />

3.然后,您可以通过访问新路由中的参数

<Typography variant="h4" color="inherit">
    Exchange:{this.props.match.params.variable1}
</Typography>


<Typography variant="Body 1" color="inherit">
    Type:{this.props.match.params.variable2}
</Typography>

<Typography variant="Body 1" color="inherit">
    Durabiliy:{this.props.match.params.variable3}
</Typography>

交换:{this.props.match.params.variable1}
类型:{this.props.match.params.variable2}
持久性:{this.props.match.params.variable3}

如果使用react钩子,则可以使用useLocation

  • 链接到其他页面
  • 单击我

  • 宣布路线

  • 因此,当在命名参数之外传递道具时,我想无法在
    props
    root访问它们?您必须进入
    location.state
    才能获取它们?@MegaMatt yes
    props.location.state.myPropName
    请确保使用路由器
    HOC包装您的组件。使用上述解决方案传递数据时,我始终得到一个未定义的组件。有什么帮助吗?@mohamadhasham这是一个重要的观点。进一步解释。
    
    <Typography variant="h4" color="inherit">
        Exchange:{this.props.match.params.variable1}
    </Typography>
    
    
    <Typography variant="Body 1" color="inherit">
        Type:{this.props.match.params.variable2}
    </Typography>
    
    <Typography variant="Body 1" color="inherit">
        Durabiliy:{this.props.match.params.variable3}
    </Typography>
    
    <Route
      exact
      path={`page/:id`}
      component={BComponent}
    />
    
    const BComponent = (props) => {
      const location = useLocation();
      console.log(location.state.foo);
    
      return ()
    }