开发者问题收集

React Router v4 - 无法读取未定义的属性“params”

2018-08-10
6889

我是 React 的新手。我只需要在页面加载时从 URL 获取路径参数。我的 URL 如下。

http://localhost:3000/explorer/test/111

我已设置了如下路由,

<Route
    exact path="/explorer/test/:id"
    component={() => <BlockPage />}
  />

然后在 <BlockPage /> 组件中,我需要在组件加载时获取 :id 的值。因此,我添加了以下代码段来获取 id,但它给出了标题中的错误。

import React, { Component } from 'react';
import NavigationComp from './Navigation';
import { withRouter } from 'react-router-dom';

const BlockPage = () =>
   <div>
      <NavigationComp/>
      <BlockData />
   </div>

class BlockData extends Component {
    componentDidMount() {
       console.log(this.props.match.params.id);
    }

    render(){
        return(.....)
    }
}

export default withRouter(BlockPage);

我犯了什么错误?有人可以解释给我吗?我的目标是从 URL 获取 111 值放入 componentDidMount()

3个回答

当您想要使用组件时,您不需要像代码那样的函数,您可以像这样更改它:

<Route
exact path="/explorer/test/:id"
component={<BlockPage />}
/>

或者如果您想要这样的函数,请使用渲染函数

 <Route
exact path="/explorer/test/:id"
render={(props) => <BlockPage {...props} />}
/>

然后在 this.props.match.params 中您可以访问您的id。

MBehtemam
2018-08-10

发生这种情况是因为您的组件是 ReactRouter 知道的其他组件的子组件。例如,

<BrowserRouter>
        <Switch>
            <Route path="/Feedback">
        <Switch>
<BrowserRouter>

在上面的路由定义中,Feedback 组件中的匹配对象不为空,但如果我们在 Feedback 中有其他组件并尝试访问它,则会出现错误。

Nathaniel
2019-08-23

https://stackoverflow.com/a/57628327/12378703 这个很完美...试试这个

<Route
exact path="/explorer/test/:id"
render={(props) => <BlockPage {...props} />}
/>
machariamwangi
2019-11-15