【问题标题】:Redirecting to other page using React functional component使用 React 功能组件重定向到其他页面
【发布时间】:2020-04-07 10:04:40
【问题描述】:

我有一个有按钮的页面,如果用户单击该按钮,我将使用以下函数重定向到其他页面(例如第 2 页):

  const viewChange = (record) => {
let path = `newPath`;
history.push('/ViewChangeRequest');
};

我想将一些值传递给其他页面,比如record.id, record.name,但无法弄清楚我们可以将这些值传递给其他页面的方式..

我的另一个页面如下所示:

const ViewChangeRequest = () => { 
.....
......
......

 };
export default ViewChangeRequest;

任何人都可以就如何重定向到其他页面以及值以及检索第 2 页中的值提出任何想法..

PS:我也在使用响应式功能组件和钩子。

非常感谢。

更新:

我通过了道具,但收到类似Cannot read property 'state' of undefined的错误

 const viewChange = (record) => {
history.push({
  pathname: '/Viewchange',
  state: { id: record.id, dataid: record.key },
});
};

第 2 页:我正在这样检索

 const ViewChangeRequest = (props) => {
   const { data: localCodeData, loading: localCodeDataLoading, error: localCodeDataError } = useQuery(GET_SPECIFICLOCALCODE, {
variables: { codeinputs: { id: props.location.state.dataid } },
});
const { data: requestData, loading: requestDataLoading, error: requestDataError 
} = useQuery(GET_SPECIFICREQUEST, {
variables: { requestinputs: { id: props.location.state.id } },
});
return (
 ........
 .......

 );
};
export default ViewChangeRequest;

第二次更新:

routes.js 文件

 {
  path: '/Viewchange/:id/:dataid',
  title: 'Viewchange',
  icon: 'dashboard',
  breadcrumbs: ['dashboard'],
  contentComponent: ViewChangeRequest,
  isEnabled: () => false,
  },

第 1 页:

  const viewChange = (record) => {
debugger;
history.push(`/Viewchange?id=${record.id}&dataid=${record.key}`);
};

第 2 页

const ViewChangeRequest = (props) => {
};
export default withRouter(ViewChangeRequest);

【问题讨论】:

  • 有人可以就此提出任何想法
  • 你有没有机会使用<HashRouter>

标签: javascript reactjs react-router router react-functional-component


【解决方案1】:

首先,带状态推送到路由

history.push('/Viewchange',{ id: record.id, dataid: record.key });

然后,你必须用withRouter 函数包装你的组件,这将为你提供historymatchlocation 属性。

要访问传递的状态,请使用location.state

const ViewChangeRequest = (props) => {
     const state = props.location.state;
     console.log(state);
     return <h1>VIEW CHANGE REQUEST</h1>
};
export default withRouter(ViewChangeRequest);

【讨论】:

  • 我可以使用您的解决方案,但是有些道具如何被多次击中,对于第一个请求,第二个请求工作正常,值变得未定义
【解决方案2】:

您可以使用以下代码进行重定向:

import  { Redirect } from 'react-router-dom'
.
.
.
return <Redirect to='/page1'  />

或者您可以使用历史记录:

this.props.history.push('/path')

更多信息请查看链接:

best way to redirect a page

react-router-redirection

【讨论】:

    【解决方案3】:

    我希望您使用的是 BrowserRouter。您通过历史对象发送数据的方式很好。你确定你通过 props.location.state 发送的任何数据都不是未定义的吗?尝试 console.log 在您的 ViewChangeRequest 页面中记录道具位置对象。

    【讨论】:

      【解决方案4】:

      如果您在 React 应用程序中使用 &lt;HashRouter&gt; 进行路由,那么问题就出在那儿。不幸的是,它没有状态,因为它没有使用 History API。 你看到的location.state 取决于此。所以我想这就是你在那里得到undefined 的原因。

      对于您的方案,我认为有两种可能的解决方案。

      使用&lt;BrowserRouter&gt;

      如果您将路由更改为&lt;BrowserRouter&gt;,一旦您使用如下所示,它将显示该位置的状态,如下所示:

      history.push('/ViewChangeRequest', { id: 'some id', dataid: 'some key' });
      

      来自&lt;BroswerRouter&gt; 文档:

      &lt;Router&gt; 使用 HTML5 历史 API(pushState、replaceState 和 popstate 事件)使您的 UI 与 URL 保持同步。

      我已经测试过了,在控制台上我看到以下内容:

      使用查询字符串:

      或者只是简单地通过 URL 传递它,如下所示:

      history.push('/ViewChangeRequest?id=someId&dataid=someKey');
      

      并使用locationsearch 属性:

      const queryString = history.location.search;
      

      历史 API:

      来自History API 文档:

      DOM Window 对象通过历史对象提供对浏览器会话历史的访问。

      我希望这会有所帮助!

      【讨论】:

      • 感谢您的回复.. 我正在使用您的查询字符串方法,但使用此 url http://localhost:3000/Viewchange?id=34daf76e9e6043238bd1725a347af8d4&amp;dataid=96a83572aec2425a8e8ee75afbf52bd3# 得到空白页
      • @EnigmaState 你在console 里有什么吗?错误信息、警告等?
      • 我得到那个 url 并且页面是空白的
      • 我将发布答案,因为我需要对路线进行轻微修改
      猜你喜欢
      • 2020-03-25
      • 1970-01-01
      • 2018-04-07
      • 2018-11-15
      • 2017-05-01
      • 2012-03-16
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多