当前位置: 首页 > 知识库问答 >
问题:

使用道具进行React重定向不会呈现最终组件

伍玮
2023-03-14

我试图通过“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;

共有1个答案

邬友樵
2023-03-14

能够找到需要一些更改的解决方案。

    < li >在Router.tsx中,无需传入props,因为它是由react-router-dom直接注入的。因此将路线更改为:
<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 在这个问题中要补充几点: 我确认重定向确实发生在(我通过将