Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将nl2br移植到Javascript/React-如何手动转义文本?_Javascript_Python_Reactjs_Escaping_Jinja2 - Fatal编程技术网

将nl2br移植到Javascript/React-如何手动转义文本?

将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(

我正在将一个小型的side项目从Flask+服务器端模板呈现移植到Flask+React。其中一个组件使用了该功能 简单地将纯文本中的换行翻译成HTML中的

标记。我想在惯用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}; }
注意:我不认为这段代码正确地使用了
道具,因为我现在还不太明白这一点。但这对我来说是有效的