【发布时间】:2019-07-14 14:36:16
【问题描述】:
在我的 React 应用程序中,我从另一台服务器(维基百科)获取了一些 HTML,并且 - 在本文中 - 想要用 react-router 链接替换所有链接。
我想出的是以下代码:
// Parse HTML with JavaScript DOM Parser
let parser = new DOMParser();
let el = parser.parseFromString('<div>' + html + '</div>', 'text/html');
// Replace links with react-router links
el.querySelectorAll('a').forEach(a => {
let to = a.getAttribute('href');
let text = a.innerText;
let link = <Link to={to}>{text}</Link>;
a.replaceWith(link);
});
this.setState({
html: el.innerHTML
})
然后在render() 之后,我将其插入到页面中使用
<div dangerouslySetInnerHTML={{__html: this.state.html}} />
问题在于 React JSX 不是原生 JavaScript 元素,因此无法与 replaceWith 一起使用。我还假设这样的Link 对象不能存储为文本,然后使用dangerouslySetInnerHTML 恢复。
那么:执行此方法的最佳方法是什么?我想保留链接周围的所有各种元素,所以我不能简单地遍历render()中的链接
【问题讨论】:
-
您可以创建利用历史 API 的链接,以便“以编程方式”影响 react-router,就像您希望 javascript 的任何部分在不使用 @987654328 的情况下更改页面时一样@
标签: javascript reactjs react-router jsx