使用React功能组件重定向到其他页面

时间:2019-12-14 00:14:37

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

我在一个页面上有一个按钮,如果用户单击该按钮,我将使用以下功能重定向到另一个页面,例如(第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);

4 个答案:

答案 0 :(得分:0)

如果您在React应用中使用<HashRouter>进行路由,那么问题就出在这里。不幸的是,它没有状态,因为它没有使用History API。 location.state取决于您看到的内容。因此,我想这就是您到达undefined的原因。

有2种可能的解决方案可以解决您的情况。

使用<BrowserRouter>

如果您将路由更改为<BrowserRouter>,则在您按照以下方式使用后,其位置状态将如下所示:

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

摘自<BroswerRouter>文档:

  

使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Router>使您的UI与URL保持同步。

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

history

使用查询字符串:

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

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

并使用search的{​​{1}}属性:

location

历史记录API:

摘自History API文档:

  

通过DOM Window对象,可以通过history对象访问浏览器的会话历史记录。

我希望这会有所帮助!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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 :(得分:0)

首先,按状态推送路由

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);