javascript - 有没有办法在状态声明中包含条件?
问题描述
我正在为 React JSX 中的网站制作表单。根据用户的类型(访问级别),他们需要能够查看/存储表单中的不同字段。我正在从事的项目是我刚刚加入的项目(我是 React 的新手),不幸的是,它太长了,无法共享大量代码。我坚持的是:
我有一些值,我们称它们为 A 和 B。用户 1 不应该看到 A 或 B,而用户 2 需要同时看到它们。这些值是从下拉菜单中选择的,因此它们需要能够更改(即它们需要是“状态”值)。但是,如果我尝试将 A 和 B 添加到“状态”,当我是用户 1 并访问该网站时,我会收到控制台错误,因为它正在尝试访问与我的帐户/表单无关的值。
我希望我可以做一些布尔函数,我们称之为 isUser2,如果我是用户 2,它返回 true,如果我不是,则返回 false。然后,我可以这样说:
this.state = {
{(this.props.isUser2) &&
A: // some default value,
B: // some default value,
}
C: // some value that User 1 and User 2 both need to access,
};
但是,这种语法不起作用,我只是不太了解 React,无法理解这样的事情是否可能,以及为什么或为什么不。
正如我所说,该项目是广泛的,并且遵循以前作者决定的任何约定,这些约定仍然得到执行。为了实现这一点,我真正必须在这里玩的唯一事情是道具和状态。如果有人对这个问题有任何见解,我将非常感激。
解决方案
您可以有条件地将属性插入到对象文字中。
const obj = {
...condition && { property: value },
};
所以,你可以做
this.state = {
...this.props.isUser2 && { A: // some default value },
...this.props.isUser2 && { B: // some default value },
C: // some value that User 1 and User 2 both need to access,
};
推荐阅读
- typescript - Mongoose 和 Typescript 模型需求函数
- time-complexity - 通过位长度确定程序的执行时间?
- python - 如何使用 Selenium 按类定位剑道按钮
- javascript - 为数字而不是字符串工作的对象的顺序数组
- amazon-web-services - 无效资源和格式错误的策略错误 - aws cloudformation YAML
- kubernetes - K8s getting error after change gcloud sdk location on Macos
- javascript - 如何在html文件中使用函数调用
- javascript - 如何计算不同日期的 24 小时格式的两个时间之间的差异?
- c - 如何找到正确的括号顺序?
- css - 在 iFrame 中的内容上应用 CSS