reactjs - 如何在 Promise 响应中使用 IF 语句来呈现 React 组件
问题描述
我正在使用护照本地猫鼬在我的数据库中注册用户。我正在使用 react-router 进行客户端渲染。在我的 Register.jsx React 组件中,一旦填写了用户名和密码输入并单击“注册”按钮,我将调用以下函数:
function submitUser() {
Axios.post("http://localhost:4000/register", {
username: registerUsername,
password: registerPassword
}).then(function(res) {
if (res.data === "User already exists") {
history.push("/register");
} else if (res.data === "User created") {
history.push("/registerconfirmed");
}
});
}
在服务器端,这是处理该发布请求的代码:
app.post("/register", (req, res) => {
User.findOne({ username: req.body.username }, async (err, doc) => {
if (err) throw err;
if (doc) res.send("User already exists");
if (!doc) {
const hashedPassword = await bcrypt.hash(req.body.password, 10);
const newUser = new User({
username: req.body.username,
password: hashedPassword
});
await newUser.save();
res.send("User created");
}
我已确认新用户已成功添加,而现有用户未成功添加。我在客户端得到的响应也可以记录来自服务器的正确响应。
问题是我设置的 IF 语句不起作用。无论注册新用户成功/失败,Register.jsx React 组件都会简单地刷新。如果不成功,我想重新加载 Register.jsx 组件,但是我想在新用户注册成功时呈现 RegisterConfirmed.jsx 组件。我怎样才能正确地做到这一点?
解决方案
方法一:
function submitUser() {
Axios.post("http://localhost:4000/register", {
username: registerUsername,
password: registerPassword
}).then(function(res) {
if (res.data === "User already exists") {
return <Register />
} else if (res.data === "User created") {
return <Registerconfirmed />
}
});
}
方法2: 你可以用useState来做
import { useState } from 'react';
function submitUser() {
const [status, setStatus] = useState(NULL);
Axios.post("http://localhost:4000/register", {
username: registerUsername,
password: registerPassword
}).then(function(res) { setPage(res.data) });
return (
{
status === "User already exists" ?
<Register /> : status === "User created" ?
<Registerconfirmed /> : NULL
}
)
}
推荐阅读
- python - Python:将语音与空音频记录区分开来
- react-native - React Native - Have view height set by content
- apache-spark-sql - 读取 CSV 文件时支持 SparkSQL 中的 Map 数据类型
- stripe-payments - 为什么条带订阅计费周期不在同一天为所有客户收费?
- cmake - CMake 激活外部程序
- jakarta-ee - 是否需要在拦截器上定义拦截器绑定?
- javascript - 查找字符串中长度最大的所有单词
- laravel - 如何在 Laravel 项目中使用“bootstrap-datetimepicker”?
- angular - 角度应用程序运行时 REST 客户端停止
- scala - Scalamock 无法区分期货