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

如何在单独的组件中使用url参数

宋俊民
2023-03-14

在过去的两天里,我一直在学习React,我在理解URL参数方面遇到了困难。

假设我想要一个路由mysite.com/details/1023。路线的定义如下:

<Route path="/details/:id" render={() => <DishDetails />}/>

现在我希望在另一个文件中定义的dishdestails对象能够使用id1023。我该怎么做?我已经找到了关于路由url参数的教程,但没有一个解释如何实现这一点。

下面是我的dishdestails视图现在的样子:

import React, {Component} from "react";
import "./DishDetails.css";
import {Link} from "react-router-dom";

class DishDetails extends Component {
    constructor(props) {
        super(props);
        this.state = {
            id: /*url param*/,
        };
    }
    render() {
        return this.state.id;
    }
}

export default DishDetails;

在哪里可以获得详细信息中的id?我试过:

import React, {Component} from "react";
import "./DishDetails.css";
import {Link} from "react-router-dom";

class DishDetails extends Component {
    constructor(props) {
        super(props);
        this.state = {
            id: match.id,
        };
    }
    render() {
        return this.state.id;
    }
}

但是,match未定义。

共有3个答案

姚淳
2023-03-14

你有没有尝试过react-router自带的with路由函数?

import { withRouter } from 'react-router'

class App extends Component {
   .... your stuff
}

export default withRouter(App);

这样你就可以使用“匹配”道具了

皇甫德庸
2023-03-14
  • 匹配
  • 位置
  • 历史

您需要为

const DishDetails = props => <div>Details Id: {props.match.params.id}</div>;

<Route path="/details/:id" render={props => <DishDetails {...props} />} />

这是您示例中的路线道具:

{
    match: { path: '/details/:id', url: '/details/1', isExact: true, params: { id: '1' } },
    location: { pathname: '/details/1', search: '', hash: '' },
    history: { length: 3, action: 'POP', location: { pathname: '/details/1', search: '', hash: '' } }
}

使用

在这里阅读更多

冯玮
2023-03-14

通过组件道具将组件传递到路线

<Route path="/details/:id" component={DishDetails} />

如果您这样做了,则道具中提供了匹配

如果你必须保持渲染路线的方式,你可以手动将渲染道具传递给你的组件:

<Route path="/details/:id" render={(props) => <DishDetails {...props} />}/>

你可以在这里找到反应路由器的整个留档。

 类似资料:
  • 我有一个react组件,它加载在路由上 我需要从components构造函数中的url访问一个参数 我该怎么做呢? 我可以这样访问它吗:

  • 在我的项目中,当我只需单击主页上的“加入房间”按钮时,它会将我指向特定的房间。以房间号为例;它发生在xPOgk21523aqPW上,它通过一个像localhost:3000/room/xPOgk21523aqPW这样的扩展来实现。当我进行重定向时,我所在组件的名称是Player。我想要的是,当我将Homapage.js重定向到Player.js时,能够使用Player.js中的代码“xPOgk21

  • 我见过许多在主类中编写AnimationTimer和KeyListener的示例,但在另一个类中没有看到。 我尝试过如何在“VolleyController”中为JavaFX编写一个KeyListener,但我不知道为什么它不起作用。 首先,我使用KeyEvent移动图像,就像第一个代码一样。第三个代码是我的主类。我想重写这些方法来移动图像,就像第二个代码一样。 但是我遇到了第二个代码中写的一些错

  • 这听起来像是垃圾,但我应该如何读取URL并从React JS中的URL获取其值。我被告知使用QueryString来处理GET参数。 Url具有以下结构: 在component类中,我使用以下代码: 问号符号是怎么也被重审的?如何修复它,使我能够在不做太多手工的情况下获得这些值?

  • 例如: 打包时候,vconsole总是被打包到chunk-vendors中,没有单独打成一个chunk,这么配置如何修改,才能实现异步加载vconsole?

  • 我正在React.js网站上浏览react教程(井字游戏),我想在用户单击它时单独设置每个正方形的样式。更具体地说,当轮到玩家 X 时,正方形应该变成红色,当轮到玩家 O 时,正方形应该变成蓝色。我试图使用道具和状态来改变颜色。但是,react 会更改所有方块,而不是单独更改方块的颜色。 以下是我迄今为止所尝试的。