В моем приложении для реагирования, которое работает с API, я получаю JSON значений для отображения данных в компонентах. Так, например, у меня есть компонент Features
:
const Features = () => {
const { title } = useSelector(({ titles }) => titles);
let string = title.features;
// the string can contain some html tags. Example bellow:
// sting = 'This is a string containing a href to <a href="www.google.com">Google</a>';
string = string.replace(/href="(.*?)"/g, function() {
return `onClick="${() => shell.openExternal('www.google.com')}"`;
});
return (
<>
<Heading>Features</Heading>
<Text content={parsedHTML} />
</>
);
};
Я хочу заменить атрибут href
на onClick
и назначить функцию Electron shell.openExternal()
.
Функция обратного вызова string.replace()
делает это, но когда я нажимаю на элемент <a>
, приложение выдает следующую ошибку:
error: uncaughtException: Ожидается, что прослушиватель onClick
будет функцией, вместо этого он получил значение типа string
.
ОБНОВЛЕНИЕ
Также пробовал этот лог c, и возникает та же ошибка:
global.openInBrowser = openInBrowser; // openInBrowser is basically a function that calls shell.openExternal(url)
const re = new RegExp('<a([^>]* )href="([^"]+)"', 'g');
string = string.replace(re, '<a$1href="#" onClick="openInBrowser(\'$2\')"');
Вот ссылка на Sandbox rep.
Как мне это сделать правильно?