reactjs - 如何在我的登录页面上传递我的错误消息
问题描述
我handleLogin
在文件中有一个函数auth.js
,我想检索在 .catch 中收到的错误并将它们传输到我的Alert.js
文件中,以便在警报中显示错误Login.js
...
这是我的handleLogin
功能auth.js
export const handleLogin = async ({ email, password }) => {
const user = await ooth.authenticate('local', 'login', {
username: email,
password: password,
}).catch(e => {
alert(e.message)
});
await navigate(`/app/profile`);
if (user) {
return setUser({
id: user._id,
username: `jovaan`,
name: `Jovan`,
email: user.local.email,
avatar: `3`,
telephone: `0788962157`,
bio: `I'm a front-end dev`
})
}
return false
}
我的警报.js
import React from "react";
import { Alert } from "shards-react";
export default class DismissibleAlert extends React.Component {
constructor(props) {
super(props);
this.dismiss = this.dismiss.bind(this);
this.state = { visible: true, message: "Message par défaut" };
}
render() {
return (
<Alert dismissible={this.dismiss} open={this.state.visible} theme="success">
{this.message()}
</Alert>
);
}
dismiss() {
this.setState({ visible: false });
}
message() {
return this.state.message
}
}
我将我的 Alert.js 导入了我的登录页面,所以我目前有默认消息
解决方案
无论您的代码中有什么,您都需要以某种方式通过道具传递登录失败的结果,<DismissableAlert />
我假设它会是/login
或类似的。我的猜测是通过“状态”选项传递错误来做这样的事情,该选项navigate
提供:
const error = null;
const user = await ooth.authenticate('local', 'login', {
username: email,
password: password,
}).catch(e => {
error = e
console.err(e.message)
});
if(error) {
await navigate(`/login`, {
state: { error: error },
});
}
然后在您的LoginPage
组件(或任何它被称为)中,您应该可以访问错误的结果作为道具,然后您可以将其传递给警报:
render() {
const {error} = this.props
return(
<div>
<LoginForm />
{error &&
<DismissibleAlert message={error.message} />
}
</div>
)
}
或者类似的东西,取决于你的组件。我注意到您在 DismissableAlert 中有一条默认消息,因此这只是一个示例,表明您可以传递错误以使用它来显示相关消息。
推荐阅读
- python - 在pyomo python中定义因变量
- php - 如何将子数组与父数组合并
- nlp - 无法设置属性“trainable_weights”,可能是因为它与现有的只读冲突
- eiffel - eiffel:当断言打开时显式执行代码的语句
- matplotlib - 如何在 jupyter notebook 中排列多个交互式图形?
- sql - 不支持 LEFT JOIN 表达式
- snowflake-cloud-data-platform - 雪花 object_construct 卸载键顺序应保持不变。如何保持不按字母顺序排列?
- c++ - 如何在 OpenGL 中只渲染 EBO 的一部分?
- javascript - jQuery 类标签删除
- apache-spark - 在 pyspark api 中命中多个端点