javascript - React 简化开关和条件渲染?
问题描述
我想我的实现可能过于复杂。它按预期工作,但我觉得可以更好地优化或实施。
我的对象包含:
status = {
loginError = false,
ErrorReason = ""
}
在我的表单中,我使用status
对象来渲染组件来处理任何错误。
const Form = props => {
const { loginError, ErrorReason } = props
return(
<Form>
{ErrorReason === "1" && loginError && <Signup/> }
{ErrorReason !== "1" && loginError && <ErrorBox ErrorReason={ErrorReason } />}
</Form>
)
}
最后在我的ErrorBox
组件中。我显示一个对话框
const ErrorBox = ({ ErrorReason }) => {
let error = {
icon: "",
info: "",
color: ""
};
switch (loginErrorReason) {
case "2":
error = {
icon: "user",
info: "ERROR 2",
color: "#fff"
};
break;
case "3":
error = {
icon: "password",
info: "ERROR 3,
color: "#000"
};
break;
default:
break;
}
return (
<div>
<Icon
type={error.icon}
style={{ fontSize: 22, marginRight: 12, color: `${error.color}` }}
/>
{error.info}
</div>
);
};
有没有更好的方法来处理这些错误或以更短、更优雅的方式编写整个实现?
解决方案
您的状态对象无效 - 它不应该=
用于分配。您的状态对象应该是:
status = {
loginError: false,
ErrorReason: null
}
在您的表格中,您可以执行以下操作:
<Form>
{loginError ? (
<>
{ErrorReason === "1" ? (
<Signup/>
) : (
<ErrorBox ErrorReason={ ErrorReason } />
)}
</>
) : (
//not login error
)}
</Form>
您的 ErrorBox 组件似乎没问题。除非您打算在那里做某事,否则您不需要在 switch 块中使用 default 子句。
const ErrorBox = ({ ErrorReason }) => {
let error = {
icon: "",
info: "",
color: ""
};
switch (loginErrorReason) {
case "1":
error = {
icon: "user",
info: "ERROR 1",
color: "#fff"
};
break;
case "2":
error = {
icon: "password",
info: "ERROR 2,
color: "#000"
};
break;
}
return (
<div>
<Icon
type={error.icon}
style={{ fontSize: 22, marginRight: 12, color: `${error.color}` }}
/>
{error.info}
</div>
);
};
推荐阅读
- php - file_get_contents(includes_url('/js/jquery/jquery.js')); 不工作
- php - 使每一行 DataTables 成为 ID 的超链接
- python - PyCharm:独立/相关项目配置
- java - Spring security with xml config NoSuchBeanDefenitionException 没有 AuthenticationManager 类型的限定 bean
- tensorflow - 使用 Dataset API 从 TFrecord 读取图像并在 Jupyter 笔记本上显示它们
- c# - 如何从 C# 中的 Drodownlist 中获取值
- search - Flutter Firestore Query Listen - 无法从 Listen 中引用变量
- excel - .找到从范围中读取多个项目的最佳/最佳实践方式
- javascript - 计算器:字符串转换为数学运算 (JavaScript)
- mongodb - MongoDB中的“桶”与数据库和集合之间的关系是什么?