如何在 React JS 中打开一个新页面并在它们之间传递数据

Posted

技术标签:

【中文标题】如何在 React JS 中打开一个新页面并在它们之间传递数据【英文标题】:How to open a new page and pass data between them in React JS 【发布时间】:2022-01-22 19:44:49 【问题描述】:

我正在升级我的项目的搜索栏。我希望当我按下其中一个结果时会打开一个新页面,其中包含所选对象的所有数据。这是在链接中显示搜索结果的函数代码,理论上,当我按下名称时,我应该转到将对象传递给新页面的页面。


  filteredData.length != 0 && (
    <div className="dataResult">
      filteredData.slice(0, 3).map((obj, key) => 
        return (
          <Link
            className="dataItem"
            to= pathname: "/SelectedObj", state: obj 
          >
            obj.Name
          </Link>
        );
      )
    </div>
  );

所以这部分代码可以工作,但是新页面没有任何结果,我无法理解如何访问我传递给新页面的对象。这里是新页面的代码。

function SelectedUser() 
  return <h1>Hello world</h1>;

我不明白的是为什么它没有向我显示 Hello world,除了如何访问传递的对象。

编辑:我检查过,但忘记更新路由部分。现在一切正常,谢谢。

【问题讨论】:

请添加路由部分(通常在 App.js 中定义的路由)。 【参考方案1】:

要访问传递给新页面的对象,

使用 useLocation 钩子,它是一个返回包含有关当前 URL 信息的位置对象的函数。每当 URL 发生变化时,都会返回一个新的位置对象。

import  useLocation  from "react-router-dom";

    function SelectedUser() 
    const location = useLocation();
    console.log(location.state);

        return (
          <h1>Hello world</h1>
       )
    

【讨论】:

好的,但是当我按下结果时它会更改页面,但该页面是空白的并且“不起作用”。 @Dodo1991 错误可能是定义路由时组件导出或导入不正确造成的,否则贴出的代码是正确的。同样在评论中,我请求了定义路由的代码。【参考方案2】:

使用道具从父母到孩子

试想一下app的目录结构如下:父组件实际渲染app中的子组件。

App
 └── Parent
   ├── Child1
   └── Child2

这是 React 中最简单最基本的数据流向。

class Parent extends React.Component state =  data : "Hello World"  
render() 
        
        return (
            <div>
                 <Child1/>            //no data to send             
                 <Child2 dataFromParent = this.state.data />
            </div>
        );    

使用变量this.props.dataFromParent获取父子传递的数据。

class Child2 extends React.Component 
 render() 
         
         return (
             <div>
                 Data from parent is:this.props.dataFromParent
             </div>
         );
     
 

使用回调从子级到父级

假设您想从 child1 向父母发送一条消息,其中包含“你好,你好吗?”的消息。采取以下步骤:

在 Parent.js 中,设置一个回调函数以接收您从子级访问的参数。 将回调函数作为 props 发送给 child1.js。

class Parent extends React.Component 
state =  message: "" 
callbackFunction = (childData) => 
      this.setState(message: childData)
,


 render() 
        return (
            <div>
                 <Child1 parentCallback = this.callbackFunction/>
                 <p> this.state.message </p>
            </div>
        );


在 child1.js 中使用 this.props.callback(dataToParent) 传递您的数据。

class Child1 extends React.ComponentsendData = () => 
         this.props.parentCallback("Hey Popsie, How’s it going?");
    ,

render()  
//Any time you wish to send data from child to parent component, call the sendData function.
    
;

【讨论】:

【参考方案3】:

链接

<Link to="dataitem"
    state= state : "value" 
>Navigate</Link>

并在数据项页面中使用 useLocation 来获取这样的数据

import  useLocation  from "react-router-dom";

   const location = useLocation();

   console.log(location.state);

【讨论】:

这个 React Router V6 顺便说一句

以上是关于如何在 React JS 中打开一个新页面并在它们之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

location.href 如何在在新窗口中打开页面!

react中路由跳转,当前页面上直接打开新标签页,重新开一个单独的页面

React - 在表格行上触发点击事件并在另一个页面中显示所选行的详细信息

在 React.js 中重新加载页面 onSubmit

react中打开新页面并且传参的方法

如何在 iOS 中使用 React Native 保存下载的文件并在文件应用程序中查看?