我正在使用React中的前端开发产品预订表单系统,我们必须支持IE9 +。我拥有(Babel,Promise,Fetch)中的所有标准polyfills,并且大多数事情都正常进行。这是该问题的简短说明:
要显示的表单字段的信息是通过Fetch请求以JSON格式异步拉入的。
我们有一些表单字段根据其他字段的值有条件地显示。
在Fetch请求中将条件规则与其他所有条件一起拉下来,形式为ES6箭头函数,该函数返回是否显示字段的true / false-例如(student) => student === 'yes'
< / p>
我使用eval()来运行此规则,只要它取决于更新的字段
这在现代浏览器中完美运行,但是我们引入的功能并未由Babel填充,因此在IE中,eval()仍在尝试运行箭头功能并崩溃
< / li>以下是处理以下规则的函数:
processRules() {
if (this.props.item.rules && this.props.item.rules.length > 0) {
const ruleset = this.props.item.rules;
for (let i = 0; i < ruleset.length; i++) {
let targetItem = this.props.fields.find((e) => e.name === ruleset[i].target);
if (targetItem.value) {
let rule = ruleset[i].condition;
let checkRule = eval(rule);
if (checkRule(targetItem.value) === true) return ruleset[i].action;
}
}
} else {
return 'show';
}
}
关于如何使此函数重新填充为ES5语法的任何建议?我有babel-plugin-transform-eval,但它不影响此功能。
(旁注:我了解eval的所有问题。所有这些。我们已经非常仔细地考虑过eval的所有安全问题,无论如何我们都很乐意使用它。)