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

如何在react router v4中通过history.push/Link/Redirect传递参数?

施永宁
2023-03-14

在React Router v4中,如何使用this.props.history.push('/page')传递参数?

.then(response => {
       var r = this;
        if (response.status >= 200 && response.status < 300) {
             r.props.history.push('/template');
          });

共有3个答案

金骞尧
2023-03-14

>

  • 对于早期版本:

    history.push('/[pathToSomeWhere]', yourData);
    

    并获取相关组件中的数据,如下所示:

    this.props.location.state // it is equal to yourData
    

    对于较新版本,上述方法效果良好,但有一种新方法:

    history.push({
      pathname: '/[pathToSomeWhere]',
      state: yourData,
    });
    

    并获取相关组件中的数据,如下所示:

    >

    this.props.location.state; // it is equal to yourData
    

    功能部件

    const location = useLocation();
    location.state; // it is equal to yourData
    

    有时需要使用LinkNavLink组件,而不是使用history.push函数。

    <Link
      to={{
        pathname: '/[pathToSomeWhere]',
        state: yourData
      }}
    > 
      ...
    </Link>
    

    提示:最新版本中应使用状态键名。

  • 冉高寒
    2023-03-14

    将溶液(由Shubham Khatri建议)扩展至与反应挂钩(16.8及以后)一起使用:

    package.json (always worth updating to latest packages)
    
    {
         ...
    
         "react": "^16.12.0",
         "react-router-dom": "^5.1.2",
    
         ...
    }
    
    

    通过历史推送传递参数:

    import { useHistory } from "react-router-dom";
    
    const FirstPage = props => {
        let history = useHistory();
    
        const someEventHandler = event => {
           history.push({
               pathname: '/secondpage',
               search: '?query=abc',
               state: { detail: 'some_value' }
           });
        };
    
    };
    
    export default FirstPage;
    
    
    

    使用“react router dom”中的useLocation访问传递的参数:

    import { useEffect } from "react";
    import { useLocation } from "react-router-dom";
    
    const SecondPage = props => {
        const location = useLocation();
    
        useEffect(() => {
           console.log(location.pathname); // result: '/secondpage'
           console.log(location.search); // result: '?query=abc'
           console.log(location.state.detail); // result: 'some_value'
        }, [location]);
    
    };
    
    
    李招
    2023-03-14

    首先,您不需要执行var r=this if语句中所述引用了回调本身的上下文,因为您使用的是arrow函数,所以它引用了React组件上下文。

    历史对象通常具有以下属性和方法:

    >

  • 长度-(数字)历史堆栈中的条目数
  • action-(string)当前操作(PUSH、REPLACE或POP)
  • 位置-(对象)当前位置。可能具有以下属性:

    • 路径名-(字符串)URL的路径
    • 搜索-(字符串)URL查询字符串
    • 哈希-(字符串)URL哈希片段
    • 状态-(字符串)将此位置推送到堆栈上时提供给例如push(路径、状态)的特定于位置的状态。仅在浏览器和内存历史记录中可用

    因此,在导航时,您可以将道具传递给历史对象,例如

    this.props.history.push({
      pathname: '/template',
      search: '?query=abc',
      state: { detail: response.data }
    })
    

    或者类似地,对于链接组件或重定向组件

    <Link to={{
          pathname: '/template',
          search: '?query=abc',
          state: { detail: response.data }
        }}> My Link </Link>
    

    然后在使用/template路径呈现的组件中,您可以访问传递的道具,如

    this.props.location.state.detail
    

    还请记住,当使用来自props的历史或位置对象时,您需要将组件与路由器连接。

    带路由器

    您可以访问历史对象的属性和最近的

  •  类似资料:
    • 问题内容: 如何在不暴露URL的情况下将prop与组件一起传递? 这样吗?我正在使用。 问题答案: 您可以这样传递数据: 这是您可以访问的方式: 该API文档解释了如何通过状态和其他变量重定向/历史道具。 来源:https : //github.com/ReactTraining/react-router/blob/master/packages/react- router/docs/api/Re

    • 问题内容: 我正在使用PhantomJS page.evaluate()进行抓取。我的问题是我传递到Webkit页面的代码是沙盒化的,因此无法访问我的主要幻象脚本的变量。这使得很难使抓取代码通用。 如何将参数推入页面? 问题答案: 我遇到了确切的问题。可以使用一些技巧,因为它也可以接受字符串。 有几种方法可以执行此操作,但是我使用了一个称为的包装器,该包装器接受其他参数以传递给必须在Webkit端

    • 我有一条骆驼路线: 这是我的用户实体: 我通过设置标题尝试了这条路线: 但它不起作用 有什么方法可以通过标题设置jpa属性吗?camel文档在选项中引用了这一点,但我没有找到示例 选项: 此选项基于注册表,需要#符号。这个键/值映射用于构建查询参数。它应该是java的泛型。util。映射,其中键是给定JPA查询的命名参数,值是要为其选择的相应有效值。骆驼2.19:它也可以用于生产者。当它用于pro

    • 问题内容: 如何通过$ _GET将数组类型的一个或多个变量传递给另一页? 我总是以以下形式传递变量值 那传球呢? 我是否需要编写一个for循环并附加所有值? 谢谢 问题答案: 您可以使用语法通过_GET传递数组: PHP理解此语法,因此等于。 您还可以指定键: 多维数组也可以工作: 自动执行此操作: 一种替代方法是传递json编码的数组: 您可以解析为: 并再次使用json_encode对其进行编

    • 本文向大家介绍Python中的参数如何通过值或引用传递?,包括了Python中的参数如何通过值或引用传递?的使用技巧和注意事项,需要的朋友参考一下 Python使用的机构,这被称为“呼叫逐对象”,有时也被称为“呼叫由对象参考”或“呼叫通过共享” 如果将不变的参数(例如整数,字符串或元组)传递给函数,则传递的行为类似于C all-by-value。如果传递可变参数,则有所不同。 Python语言中的

    • 问题内容: 我使用JavaScript来执行JNLP,最终将执行我的客户端。 我试图通过JavaScript执行将参数传递给JNLP,并在客户端中通过JNLP传递这些参数。 JavaScript正在执行以下URL,例如: 现在,我的JNLP将尝试以这种方式获取参数: 但这没有用。 我无法以这种方式在客户端代码中检索这些参数: JNLP位于APACHE2.2中 知道有什么问题吗? 问题答案: 为了能