使用 React 功能组件重定向到其他页面
Redirecting to other page using React functional component
我有一个页面,其中有按钮,如果用户单击该按钮,我将使用以下功能重定向到其他页面(第 2 页):
const viewChange = (record) => {
let path = `newPath`;
history.push('/ViewChangeRequest');
};
我想将一些值传递给其他页面,比如 record.id, record.name
但无法弄清楚我们可以将这些值传递给其他页面的方式..
我的其他页面如下所示:
const ViewChangeRequest = () => {
.....
......
......
};
export default ViewChangeRequest;
任何人都可以就如何重定向到其他页面以及值以及如何检索第 2 页中的值提出任何想法..
PS:我也在使用响应式功能组件和挂钩。
非常感谢。
更新:
我通过了 props 但是得到了类似 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);
如果您在 React 应用程序中使用 <HashRouter>
进行路由,那么问题就出在这里。不幸的是,它没有状态,因为它没有使用历史 API。
location.state
您所看到的取决于此。所以我想这就是你 undefined
的原因。
有 2 种可能的解决方案适用于您的情况,我认为可能有效。
使用<BrowserRouter>
:
如果您将路由更改为 <BrowserRouter>
,一旦您使用如下方式,它将显示位置的状态,如下所示:
history.push('/ViewChangeRequest', { id: 'some id', dataid: 'some key' });
来自 <BroswerRouter>
文档:
A <Router>
that uses the HTML5 history API (pushState, replaceState and the popstate event) to keep your UI in sync with the URL.
我已经测试过了,在控制台上我看到以下内容:
使用查询字符串:
或者只是简单地通过 URL 传递它,如下所示:
history.push('/ViewChangeRequest?id=someId&dataid=someKey');
并使用 search
属性 of location
:
const queryString = history.location.search;
历史API:
来自 History API 文档:
The DOM Window object provides access to the browser's session history through the history object.
希望对您有所帮助!
希望您正在使用 BrowserRouter。您通过历史对象发送数据的方式很好。您确定通过 props.location.state 发送的任何数据都不是未定义的吗?尝试 console.log ViewChangeRequest 页面中的道具位置对象。
您可以使用以下代码进行重定向:
import { Redirect } from 'react-router-dom'
.
.
.
return <Redirect to='/page1' />
或者您可以使用历史记录:
this.props.history.push('/path')
有关更多信息,请查看链接:
首先,推送到带有状态的路由
history.push('/Viewchange',{ id: record.id, dataid: record.key });
然后,你必须用 withRouter
函数包装你的组件,这将为你提供 history
、match
和 location
属性。
访问通过状态使用location.state
const ViewChangeRequest = (props) => {
const state = props.location.state;
console.log(state);
return <h1>VIEW CHANGE REQUEST</h1>
};
export default withRouter(ViewChangeRequest);
我有一个页面,其中有按钮,如果用户单击该按钮,我将使用以下功能重定向到其他页面(第 2 页):
const viewChange = (record) => {
let path = `newPath`;
history.push('/ViewChangeRequest');
};
我想将一些值传递给其他页面,比如 record.id, record.name
但无法弄清楚我们可以将这些值传递给其他页面的方式..
我的其他页面如下所示:
const ViewChangeRequest = () => {
.....
......
......
};
export default ViewChangeRequest;
任何人都可以就如何重定向到其他页面以及值以及如何检索第 2 页中的值提出任何想法..
PS:我也在使用响应式功能组件和挂钩。
非常感谢。
更新:
我通过了 props 但是得到了类似 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);
如果您在 React 应用程序中使用 <HashRouter>
进行路由,那么问题就出在这里。不幸的是,它没有状态,因为它没有使用历史 API。
location.state
您所看到的取决于此。所以我想这就是你 undefined
的原因。
有 2 种可能的解决方案适用于您的情况,我认为可能有效。
使用<BrowserRouter>
:
如果您将路由更改为 <BrowserRouter>
,一旦您使用如下方式,它将显示位置的状态,如下所示:
history.push('/ViewChangeRequest', { id: 'some id', dataid: 'some key' });
来自 <BroswerRouter>
文档:
A
<Router>
that uses the HTML5 history API (pushState, replaceState and the popstate event) to keep your UI in sync with the URL.
我已经测试过了,在控制台上我看到以下内容:
使用查询字符串:
或者只是简单地通过 URL 传递它,如下所示:
history.push('/ViewChangeRequest?id=someId&dataid=someKey');
并使用 search
属性 of location
:
const queryString = history.location.search;
历史API:
来自 History API 文档:
The DOM Window object provides access to the browser's session history through the history object.
希望对您有所帮助!
希望您正在使用 BrowserRouter。您通过历史对象发送数据的方式很好。您确定通过 props.location.state 发送的任何数据都不是未定义的吗?尝试 console.log ViewChangeRequest 页面中的道具位置对象。
您可以使用以下代码进行重定向:
import { Redirect } from 'react-router-dom'
.
.
.
return <Redirect to='/page1' />
或者您可以使用历史记录:
this.props.history.push('/path')
有关更多信息,请查看链接:
首先,推送到带有状态的路由
history.push('/Viewchange',{ id: record.id, dataid: record.key });
然后,你必须用 withRouter
函数包装你的组件,这将为你提供 history
、match
和 location
属性。
访问通过状态使用location.state
const ViewChangeRequest = (props) => {
const state = props.location.state;
console.log(state);
return <h1>VIEW CHANGE REQUEST</h1>
};
export default withRouter(ViewChangeRequest);