如何在三元运算符上导航反应页面?
Posted
技术标签:
【中文标题】如何在三元运算符上导航反应页面?【英文标题】:How to navigate react page on ternary operators? 【发布时间】:2022-01-14 23:12:56 【问题描述】:如果 LoggedIn 和 admin 在向 /admin 发送道具时为真,我正在尝试导航到管理页面,但这不起作用。你能帮忙吗?
export default function Auth()
function login(e)
e.preventDefault();
const data = email, password ;
axios
.post("http://localhost:3001/api/Login", data, withCredentials: true )
.then((response) =>
if(!!response.data.loggedIn && !!response.data.admin) return( <Navigate to="/admin" loggedIn="response.data.loggedIn" replace/> )
else if(!!response.data.loggedIn && ! !!response.data.admin) window.location.href = "https://www.dummyweb.com/webmail";
elsereturn(alert("Username or Password is not valid!"))
);
return (
<div>
<LogginForm/>
</div>
)
【问题讨论】:
【参考方案1】:可以使用 react-router 重定向组件
return <>props.isLoggedIn ? (<div>
<Row className=stylesadmin.root>
<Uploader/>
<ToastContainer/>
</Row>
</div>) : <Redirect to='/Auth'/> </>
【讨论】:
【参考方案2】:要有条件地呈现内容或重定向,您应该使用以下内容:
react-router-dom
由于您尝试使用 useNavigate
挂钩,因此我假设您使用的是 react-router-dom
v6 并将从那里开始。
版本 6
Redirect
组件已在 react-router-dom
v6 中删除。使用Navigate
组件并指定replace
属性来执行重定向而不是正常导航。
export default function Admin(props)
return props.isLoggedIn ? (
<div>
<Row className=stylesadmin.root>
<Uploader/>
<ToastContainer/>
</Row>
</div>
) : (
<Navigate to="/Auth" replace />
);
版本 5
使用Redirect
组件重定向到“/Auth”。
export default function Admin(props)
return props.isLoggedIn ? (
<div>
<Row className=stylesadmin.root>
<Uploader/>
<ToastContainer/>
</Row>
</div>
) : (
<Redirect to="/Auth" />
);
更新
使用命令式导航/重定向。
导入useNavigate
(v6) / useHistory
(v5) 挂钩并发出命令式重定向。
export default function Auth()
const navigate = useNavigate(); // v6
// const history = useHistory(); // v5
function login(e)
e.preventDefault();
const data = email, password ;
axios
.post("http://localhost:3001/api/Login", data, withCredentials: true )
.then((response) =>
if (!!response.data.loggedIn && !!response.data.admin)
navigate(
"/admin",
replace: true,
state: loggedIn: response.data.loggedIn ,
);
// history.replace(
// "/admin",
//
// loggedIn: response.data.loggedIn,
//
// );
else if (!!response.data.loggedIn && ! !!response.data.admin)
window.location.href = "https://www.dummyweb.com/webmail";
else
alert("Username or Password is not valid!");
);
return (
<div>
<LogginForm/>
</div>
);
【讨论】:
我使用了props.isLoggedIn
是否为假?如果您 only 呈现重定向会怎样,即const Admin = () => <Navigate to="/Auth" replace />
它会导航吗?这个Admin
组件是如何/在哪里呈现的?
首先我正在执行 axios.post 请求以检查凭据是否正确,然后如果正确,我将尝试导航到 /admin,但我猜 您可以使用Redirect
组件或使用react-router-dom
中的useHistory
挂钩
【讨论】:
【参考方案4】:import useNavigate from 'react-router-dom';
export default function Auth()
let navigate = useNavigate();
function login(e)
e.preventDefault();
const data = email, password ;
axios
.post("http://localhost:3001/api/Login", data, withCredentials: true )
.then((response) =>
if(!!response.data.loggedIn && !!response.data.admin) return( navigate( "/admin" , state:loggedIn:response.data.loggedIn )
else if(!!response.data.loggedIn && ! !!response.data.admin) window.location.href = "https://www.dummyweb.com/webmail";
elsereturn(alert("Username or Password is not valid!"))
);
return (
<div>
<LogginForm/>
</div>
)
在管理页面上我按如下方式处理它
export default function Admin()
const state = useLocation();
const loggedIn = state;
return(
loggedIn?
(<whatever/>):(<whatever2/>)
)
这很好用
【讨论】:
以上是关于如何在三元运算符上导航反应页面?的主要内容,如果未能解决你的问题,请参考以下文章