ReactJS自定义组件将用户重定向到外部页面(无渲染)[重复]

oknwwptz  于 2023-08-04  发布在  React
关注(0)|答案(1)|浏览(93)

此问题在此处已有答案

React-Router External link(25个回答)
2天前关闭。
我有一个ReactJS应用程序需要修改。
当前,特定管线将显示零部件。

<Route
      exact
      path="/myroute"
      render={props => (
        <MyComponent
          {...props}
          action="myroute"
          landing={fetchParam(
            props.location.search,
            'service',
            process.env.REACT_APP_DEFAULT_SERVICE_PAGE
          )}
        />
      )}
    />

字符串
现在,我需要更改此特定路由的逻辑:
我需要检查某些参数以将用户重定向到外部页面。因此,我不再需要显示此特定路由的任何内容。
实现这一目标的最佳做法是什么?有没有可能有一个自定义组件,我可以实现这个逻辑没有任何渲染?
我试着这样做:我创建了一个用于测试的自定义组件:

import React from 'react';
import { Redirect } from 'react-router-dom';

const CustomRedirectComponent = () => {
  const shouldRedirect = true; 

  if (shouldRedirect) {
    // Redirect the user to the external page
    return <Redirect to="https://www.external-page.com" />;
  } else {
    // Render any other components 
    return <div>Content for the specific route</div>;
  }
};

export default CustomRedirectComponent;


我为它定义了一个新的路由:

<Router>
      <Switch>
        <Route exact path="/test" component={CustomRedirectComponent} />
      </Switch>
    </Router>


就这样,我在错误控制台中遇到了一个错误/警告:

Warning: Cannot update during an existing state transition (such as within render). Render methods should be a pure function of props and state.


在页面上,有一个没有任何重定向的刷新,当前URL被替换为:

https://my-domain/https://www.external-page.com


相反,如果我尝试直接使用:

window.location.href=myExternalPageUrl


这个很好用。
请注意,我正在使用:
“react-router-dom”:“^4.3.1”,

h22fl7wq

h22fl7wq1#

相反,如果我尝试直接使用:

window.location.href=myExternalPageUrl

字符串
这个很好用。
你会想做这样的事情,以避免推到历史堆栈:

window.location.replace(myExternalPageUrl);


但是,这是重定向到外部站点的最佳方式。如果你使用一个<Redirect>组件,那么react将不得不做一些渲染来完成。一般来说,最好在react之前在服务器上完成这一任务,但我知道在某些情况下这是不可能的,在这种情况下,使用window.location.replace是您最好的选择,以使其尽可能快地发生。

相关问题