React + Babel проблема с полифилом для eval () в IE11 - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю над системой форм бронирования продуктов с внешним интерфейсом в React, и мы должны поддерживать IE9 +.У меня есть все стандартные полифилы (Babel, Promise, Fetch), и большинство вещей работает нормально.Вот краткое объяснение проблемы:

  • Информация для отображения полей формы выводится асинхронно через запрос Fetch в формате JSON.

  • У нас есть некоторые поля формы, которые отображаются условно, в зависимости от значений других полей.

  • Правила условий выводятся в запросе Fetch вместе со всем остальным в формефункции стрелки ES6, которая возвращает истину / ложь для того, показывать ли поле - например, (student) => student === 'yes'

  • Я использую eval () для запуска этого правила всякий раз, когда поле зависит от поляпри обновлениях

  • Это прекрасно работает в современных браузерах, но функция, которую мы добавляем, не заполняется Babel, поэтому в IE eval () все еще пытается запустить функцию стрелкии вылетает

Вот функция, которая обрабатывает эти правила:

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.yntax?У меня есть babel-plugin-transform-eval, но это не влияет на эту функцию.

(Sidenote: я знаю все о проблемах с eval. Все они. Мы очень тщательно рассмотрели все проблемы безопасности с evalи все равно будем рады его использовать.)

...