将nl2br移植到Javascript/React-如何手动转义文本?
我正在将一个小型的side项目从Flask+服务器端模板呈现移植到Flask+React。其中一个组件使用了该功能 简单地将纯文本中的换行翻译成HTML中的将nl2br移植到Javascript/React-如何手动转义文本?,javascript,python,reactjs,escaping,jinja2,Javascript,Python,Reactjs,Escaping,Jinja2,我正在将一个小型的side项目从Flask+服务器端模板呈现移植到Flask+React。其中一个组件使用了该功能 简单地将纯文本中的换行翻译成HTML中的和标记。我想在惯用Javascript中实现类似的东西(重点是React) 我认为我缺少的关键步骤是手动执行React应用于JSX中字符串变量的相同转义的方法。那暴露在什么地方了吗 原始Python代码: 重新导入 从jinja2导入evalcontextfilter 从markupsafe导入标记,退出 _段落_re=re.compile(
和
标记。我想在惯用Javascript中实现类似的东西(重点是React)
我认为我缺少的关键步骤是手动执行React应用于JSX中字符串变量的相同转义的方法。那暴露在什么地方了吗
原始Python代码:
重新导入
从jinja2导入evalcontextfilter
从markupsafe导入标记,退出
_段落_re=re.compile(r'(?:\r\n |\r |\n){2,}')
@evalcontextfilter
def nl2br(评估ctx,数值):
结果=u'\n\n'。加入(u'%s'%p.replace('\n',标记('
\n'))
对于段落中的p,关于拆分(转义(值)))
如果eval_ctx.autoescape:
结果=标记(结果)
返回结果
代码概要:1。转义输入,2。根据换行符对将其拆分为段落(
),3。用
标记和4替换段落内的换行符。如果配置需要HTML输出,则使用标记
包装,并使用@evalcontextfilter
装饰器禁用不需要的自动转义
中间的两个步骤可以直接转换为Javascript(只是regexp和字符串处理)。我认为最后一步的反应是使用
危险的LysetinerHTML
。但是我想不出一个好的方法来完成第一步。NPM上有各种各样的HTML转义库,但如果可能的话,我想使用React的内置转义来保持一致性。这可以在React中以稍微不同的方式实现,只需在构建DOM树后转义单个字符串,而不是像Python代码中那样在拆分之前转义所有内容:
const_p_re=/((?:\r\n | \n){2,})/;
常量br_re=/(\r\n |\r |\n)/;
函数nl2br(文本){
if(text==“”)返回;
设ps=text.split(_p_re);
对于(设i=0;i
{parts[j]}
);
}
ps[i]={parts}
;
}
返回{ps};
}
注意:我不认为这段代码正确地使用了键
道具,因为我现在还不太明白这一点。但这对我来说是有效的