Задать вопрос
@Snelsi

Как обработать ошибку функционального компонента в React 16.8?

Компонент принимает в пропсах строку и пытается преобразовать её в регулярное выражение.
function ControlString(props) {
    const regExp = new RegExp(props.template, "g");
    ...
}

Апдейт вызывается на каждый вводимый символ, так что если в родителе попытаться ввести '\d', конструктор выдаст ошибку на единичную косую линию.
5d18bdaa3dba2054363974.png
В функциях не работает componentDidCatch. Как можно обработать это исключение, не переводя весь компонент в класс?
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Snelsi Автор вопроса
Ошибку всё таки легче обрабатывать не в потомке, а в родителе.
Решение свелось к следующему:
const [input, setInput] = useState("");
const [expression, setExpression] = useState("");

const updateInput = e => {
  setInput(e.target.value);
  try {
    new RegExp(e.target.value, "g");
    setExpression(e.target.value);
  } catch (e) {
    setExpression(".^");
  }
};

return (
  <input onChange={updateInput} />
  <ControlString template={expression} />
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vlad_IT
@Vlad_IT
Front-end разработчик
Вообще, есть предохранители. Но вы можете обработать ошибку при вызове конструктора RegExp через try-catch,
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы