【问题标题】:React Component renders to screen before redirecting instead of after redirectingReact 组件在重定向之前而不是在重定向之后呈现到屏幕
【发布时间】:2020-06-22 03:31:54
【问题描述】:

我有一个注销菜单,单击注销时会调用组件并将页面重定向到 /logout。

我想在页面重定向到 /logout 屏幕后呈现 MSLogin div,但在重定向页面之前呈现 div。

我怎样才能达到预期的效果?请问有人可以帮我解决这个问题吗?

export function AccountMenu(props){
const [renderMSLogin, setMSLogin] = useState(false);

<div>
<a href='/api/auth/logout' className='list-item logout'
          onClick={()=>setMSLogin(!renderMSLogin)} >logout</a>
</div>

{renderMSLogin ? <Logout /> : null}
}

这是我的注销组件

export function Logout() {
    return(
        
            <MSLogin/>
        
        );
    }

这是我的 MSLgin 组件

export function MSLogin(){

    return(
        <div className='login'>
            <div className='login-container'>
                <div className='login-box'>
                    <div className='welcome-text'>{'Welcome'}</div>
                    <a className='sign-in-link' href='/api/auth/login'>
                        <img src={mslogin} className="ms-img" alt="Microsoft" />
                        {'Sign in with Microsoft'}
                    </a>
                </div>
                <div className='spacer' />
            </div>
        </div>
    );
}

谢谢!

【问题讨论】:

  • 您的onClick 监听器将renderMSLogin 更改为true 并且Logout 正在立即渲染{renderMSLogin ? &lt;Logout /&gt; : null} },什么是'/api/auth/logout'、应用程序路由或api?
  • @NageshSanika /api/auth/logout 是一个应用程序路由。我应该在渲染 Logout {renderMSLogin 之前添加一些时间间隔吗? :空}。如果是,我该怎么做?

标签: reactjs


【解决方案1】:

您应该使用history.push() 在 React js 中的 2 个页面之间导航。试试这个:

AccountMenu.js:

import { withRouter } from 'react-router'

const AccountMenu = ({history}) => {
  handleOnClick = () => {
    history.push('/api/auth/logout')
  }
    
  return <div className='list-item logout' onClick={handleOnClick} >logout</div>
}

export default withRouter(AccountMenu)

App.js:

import { Route, Switch } from 'react-router-dom'

import Logoutfrom 'path_to_Logout.js'

const App = () => {
  ...
  return (
    <Switch>
      ...
      <Route path='/api/auth/logout' component={Logout} />
      ...
    </Switch>
  )
}

export default App

【讨论】:

  • 这是我必须进行的更改才能使其正常工作。编辑 AccountMenu 组件:``` function handleLogout() { history.push("/api/auth/logout"); }
    Logout
    ``` 注销组件版本 ``` export function Logout() { const [, setHeaderTitle] = useContext(HeaderContext);返回(
    ); } ``` 并在 App.js 中的 中添加了 Logout 组件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多