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

从react类组件中的URL参数捕获数据

李胡媚
2023-03-14

首先我要感谢所有聪明的程序员。更新后反应路由器Dom我面临这个问题。在这里我想提到一件事,我是一个“类组件”爱好者。

然而,这是我反应的基础组件。

import React, { Fragment, Component } from 'react'
import axios from 'axios'
import { Col , Row} from 'react-bootstrap'
import { Link } from 'react-router-dom'

export default class Blog extends Component {
    constructor(props) {
        super(props)
        this.state = {
             data:[]
        }
    }
    componentDidMount()
    {
        axios.get("https://jsonplaceholder.typicode.com/posts")
        .then((response)=>{
            if(response.status===200)
            {
                this.setState({
                    data:response.data
                })
            }
        })
        .catch((error)=>{})
    }
    
    render() {
        
        const allData = this.state.data;
        const blogFull = allData.map((val)=>{
            var title = val.title;
            var body = val.body;
            var id = val.id;
            return(
                <Col key={id} lg={4}>        
                    <Link to={"/post/"+id}><h1>{title}</h1></Link>
                        <p>{body}</p>
                </Col>
            )
        })
        return (
            <Fragment>
                <Row>
                {blogFull}
                </Row>
            </Fragment>
        )
    }
}

这是我的下一个组件

import axios from 'axios'
import React, { Component, Fragment } from 'react'
import { useParams } from 'react-router'

export default class Post extends Component {
    constructor(props) {
        super(props)
    
        this.state = {
            
            mydata:[],
        }
    }

    componentDidMount()
    {
        axios.get("https://jsonplaceholder.typicode.com/posts/")
        .then((response)=>{
            if(response.status===200)
            {
                this.setState({
                    mydata:response.data
                })
            }
        })
        .catch((error)=>{

        })
    }
    
    render() {
        const dataAll = this.state.mydata;

        return (
            <Fragment>
            data retriving
                <h1>{dataAll.title}</h1>
                <p>{dataAll.body}</p>
            </Fragment>
        )
    }
}

我的路线在这里:

<Routes>
<Route exact path="/" element={<Blog/>}/>
<Route exact path="/post/:id" element={<Post/>}/>
</Routes>

有人能告诉我,我怎么能通过它的url参数从基础组件中获取后组件中的数据?"匹配"对象在当前的react-router-dom更新中不工作。我需要类组件的帮助。

共有1个答案

单嘉泽
2023-03-14

在react router dom v6中,路由组件不再具有路由道具(历史位置匹配),当前的解决方案是使用这些组件的react挂钩“版本”在渲染的组件中使用。不过,React钩子不能用于类组件中。

要使用类组件访问匹配参数,您必须将其转换为功能组件,或者使用路由器推出您自己的自定义高阶组件,以注入“路由道具”,就像路由器HOC from反应路由器domv5.x中的那样。

我将不介绍如何将类组件转换为函数组件。下面是一个使用路由器的自定义示例:

const withRouter = WrappedComponent => props => {
  const params = useParams();
  // etc... other react-router-dom v6 hooks

  return (
    <WrappedComponent
      {...props}
      params={params}
      // etc...
    />
  );
};

并用新的HOC装饰组件。

export default withRouter(Post);

这将为类组件注入一个paramsprop。

this.props.params.id

 类似资料:
  • 问题内容: 如教程中所述,我目前正在定义正则表达式以捕获url中的参数。我如何从url作为对象的一部分访问参数?我当前返回一个空对象。 我想学习如何在没有库的情况下执行此操作,以便可以更好地了解Django。 问题答案: 当url如:时,你将使用。 是你想要的参数,并且是默认值(如果未找到)。 但是,如果你只是配置,则你从中捕获的内容将作为参数(或命名参数)传递给函数。 如: 然后在你views.

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

  • 问题内容: 我需要构建一个GWT应用程序,该应用程序将由具有特定URL参数的外部应用程序调用。 例如: http://www.somehost.com/com.app.client.Order.html?orderId=99999。 如何在GWT应用程序中捕获orderId参数? 问题答案: 尝试, PS GWT可以调用本机javascript,这意味着如果javascript可以完成任务,那么G

  • //文章页面 //应用 //导航栏页面 **我试图使用变量“name”传递URL参数,但当我访问ArticlePage时,我得到404:Not Found(我的NotFound页面的内容)。我试图使用ArticlePage中的props(match)获取“name”变量的值,但无法呈现它。反应相当新,任何提示或解决方案都将不胜感激。我正在使用React v6**

  • 本文向大家介绍React-Router怎么获取URL的参数?相关面试题,主要包含被问及React-Router怎么获取URL的参数?时的应答技巧和注意事项,需要的朋友参考一下 在之前的版本中,可以通过 this.props.location.query.bar 进行获取 在 v4 中,通过 this.props.location.search 获取,不过需要进行处理

  • 例如,我重定向在我的水疗localhost:3000/ProductPage/014我如何采取'014'值我的反应变量?