Я работаю над системой форм бронирования продуктов с интерфейсом в React, и мы должны поддерживать IE9 +. У меня есть все стандартные полифиллы (Babel, Promise, Fetch), и большинство вещей работает нормально. Вот краткое объяснение проблемы:
Информация о том, какие поля формы следует отображать, извлекается асинхронно с помощью запроса Fetch в формате JSON.
У нас есть некоторые поля формы, которые отображаются условно, в зависимости от значений других полей.
Правила условия извлекаются в запросе Fetch вместе со всем остальным в форме стрелочной функции ES6, которая возвращает true / false для отображения поля - так, например, (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? У меня есть babel-plugin-transform-eval, но это не влияет на эту функцию.
(Примечание: я знаю все о проблемах с eval. Все они. Мы очень внимательно рассмотрели все проблемы безопасности с eval и в любом случае рады его использовать.)
@Pointy Я могу посмотреть, как это изменить, если это абсолютно необходимо, но это потребует переписывания всех функций, которые уже есть, и я не тот, кто их пишет. Я могу это сделать, если решения нет, но предпочел бы иметь возможность решать его во внешнем интерфейсе.
Вам нужно будет запустить эти стрелочные функции через babel или какой-либо другой синтаксический анализатор ES6, прежде чем вы попытаетесь оценить их в IE11. Тем не менее, исключение подобных функций - действительно плохая идея по разным причинам.
Должна быть возможность запускать клиентскую часть babel. babeljs.io/docs/en/next/babel-standalone.html
@ HåkenLid, это именно то, что мне нужно, спасибо !!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Может ли ваш бэкэнд не возвращать традиционное выражение
function?