这是我的情况:
这是一个单页应用,正在使用True = False
执行客户端路由。
我有一个react-router-dom
,管理员将在其中创建AddBlogPostPage
。
blogPosts
段落和图像。blogPost
输入中,当{{1}时,管理员将使用textarea
输入要在<p>
标记内呈现的段落文本 。 }。dangerouslySetInnerHTML
:
blogPost
textarea
但是,当我单击[products](/products)
时,该应用程序会刷新,而不是使用<a href="/products">products</a>
切换路由。那是因为我正在使用{{1} }标签,而不是<a>
内置的react-router-dom
组件。
但是由于我使用<a>
渲染段落,在这种情况下如何显示React组件Link
而不是html标签react-router-dom
?
从到目前为止的研究来看,这似乎是不可能的。还有其他解决方法吗?
答案 0 :(得分:1)
我很确定这不是最有效的方法,也不是真正可重用的。但这至少是一个起点。
我认为您正在以状态存储该文本区域信息。将其呈现为FROM状态时,请使用
const firstText = this.state.userText.split('[products]');
获取标签之前的所有内容,然后
const lastText = firstText[1].split('[/products]');
获取链接后的所有内容。您的渲染看起来像:
<p>
{firstText[0]}
<Link to="/products">{lastText[0]}</Link>
{lastText[1]}
</p>
对于一个实际用例,您需要将其存储在状态中,跟踪所有标记的位置和位置,然后将所有内容放入单独的状态项中的数组中,以便可以适当地映射输出。毫无疑问,这将是一种方法,而不是一系列的变量声明。而且我敢肯定这并不是非常有效。但这不是不可能!
好运。
答案 1 :(得分:0)
您可以使用我为此编写的内容。
import React from 'react';
import {Link} from 'react-router-dom';
export const addLinkToText = (text) => {
const sptx= text.split('|');
const newTxt=sptx.map((txt,indx) => {
const sptx2= txt.split(':');
if(sptx2.length>1){
return <Link key={`lk${indx}`} to={sptx2[1]}>{sptx2[0]}</Link>
}
return sptx2[0];
});
return newTxt;
}
然后解析这样的文本:
<div>{addLinkToText("some text |text for link:/path_of_url| more text.")}</div>