IE11中eval()的React + Babel polyfill问题

时间:2018-12-20 14:36:09

标签: javascript reactjs ecmascript-6 babel polyfills

我正在使用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的所有安全问题,无论如何我们都很乐意使用它。)

0 个答案:

没有答案