Я работаю над системой форм бронирования продуктов с внешним интерфейсом в 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и все равно будем рады его использовать.)