我试图通过“state”属性在重定向组件内部传递一条错误消息,从而重定向到一个错误页面。
但是每当我添加“state”属性时,与重定向路由相关联的组件(ErrorPg)就不会呈现(并且我得到一个空白页面),即使URL被正确地更新了。
我试图遵循第一种解决方案,以供参考。
以下是相关文件。非常感谢。
错误处理程序。tsx(包含重定向组件的文件)
import React from "react";
import { useLocation, Redirect } from "react-router-dom";
import { get } from "lodash";
import ErrorPg from "./c1_pages/ErrorPg/ErrorPg";
const ErrorHandler = ({ children }: any) => {
const location = useLocation();
const errorMsg = get(location.state, "errorMsg");
return errorMsg ? (
<Redirect to={{ pathname: "/error", state: { errorMsg: errorMsg } }} />
/*** If I remove the "state" property, like "<Redirect to={{ pathname: "/error" }} />", it works ***/
) : (
children
);
};
export default ErrorHandler;
Router.tsx(我在/error路径中调用渲染方法以将props传递给ErrorPg组件)。
import React, { useContext } from "react";
import { BrowserRouter, Route, Switch } from "react-router-dom";
import PrivateRoute from "./PrivateRoute";
import PrivateWrap from "./PrivateWrap";
import Login from "./c1_pages/LogReg/Login";
import Register from "./c1_pages/LogReg/Register";
import ErrorHandler from "./ErrorHandler";
import ErrorPg from "./c1_pages/ErrorPg/ErrorPg";
function Router() {
return (
<BrowserRouter>
<ErrorHandler>
<Switch>
<Route path="/register" component={Register} />
<Route path="/login" component={Login} />
<Route path="/error" render={(props) => <ErrorPg {...props} />} />
<PrivateWrap>
<PrivateRoute />
</PrivateWrap>
</Switch>
</ErrorHandler>
</BrowserRouter>
);
}
export default Router;
错误Pg.tsx(我想渲染和使用道具的页面)
import React, { useState } from "react";
const ErrorPg = ({ location }: any) => {
return (
<div>
<h2>{location.state.errorMsg}</h2>
</div>
);
};
export default ErrorPg;
能够找到需要一些更改的解决方案。
<Route path="/error" component={ErrorPg} />
import React from "react";
import { useLocation, Redirect } from "react-router-dom";
import { get } from "lodash";
import ErrorPg from "./c1_pages/ErrorPg/ErrorPg";
const ErrorHandler = ({ children }: any) => {
const location = useLocation();
const errorMsg = get(location.state, "errorMsg");
return errorMsg ? (
<Redirect
to={{
pathname: "/error",
state: { err_msg: errorMsg },
}}
/>
) : (
children
);
};
export default ErrorHandler;
import React, { useState } from "react";
const ErrorPg = (props: any) => {
return (
<div>
<h2>{props.location.state.err_msg}</h2>
</div>
);
};
export default ErrorPg;
该父级接收“props.id”并将数据值传递给由getAttributes()返回的子级。 在child上,我可以在控制台和componentWillReceiveProps中看到props值,但数组没有呈现。我尝试使用react-devtool。在react-devtool中,道具似乎传递给了孩子,但不是渲染。有趣的是,在react-devtool中,当我改变数组的一些元素时,数组正在呈现。 我
我正在使用类似的代码在用户登录后在我的应用程序中重定向。代码如下所示: 触发成功登录时正常工作。但存在这样的情况,即登录的用户进入登录页面并应被自动重定向到主页页面(或任何其他页面)。 如何使用重定向组件而不呈现当前组件,以及(据我所知)不将命令推送到历史记录(例如,)中?
问题内容: 我是新来的世界,我有这样的话: 然后单击,您将被打印在控制台上。现在将行更改为: 现在点击该按钮,我希望它会被渲染。但事实并非如此。 我不确定为什么会这样。请注意,我在方法中有上面的代码。 问题答案: 您可能希望有一个状态组件,该状态组件在单击按钮之后在按钮旁边显示另一个组件。您需要做的就是跟踪按钮是否被单击:
我意识到以前有人问过我这个问题,请容忍我,因为我还在学习这个问题。我想我已经尝试了所有的解决方案,但是没有运气。 问题是:当重定向到时,它没有呈现预期的组件() 我已经实现了一个,如下所示; privaterout.js 这就是我使用它的地方; index.js 在这个问题中要补充几点: 我确认重定向确实发生在(我通过将