【问题标题】:How to display the text with "anchor tag", coming from json response in react?如何显示带有“锚标签”的文本,来自json响应中的反应?
【发布时间】:2020-11-17 21:10:15
【问题描述】:

我有以下代码:

JSON 响应:

{
   "url": ["http://google.com"],
   "text": ["Click <a>me</a> for help"]
}

代码:

import React, { Fragment } from 'react';

export const Print = (props) => (
  <Fragment>
    {(props.text[0].split('/n').length && props.text[0].split('/n').map(i => {
      return <p dangerouslySetInnerHTML={{ __html: i }}></p>
    })) || text[0]}
  </Fragment>
)

我的要求

<p> Click <a href="http://google.com">me</a> for help <p>

这应该像上面那样工作。我无法理解如何呈现 json,因此 dangerouslySetInnerHTML 将从“url”获取锚标记作为响应并将其分配给代码中的 i

代码将位于不同的文件中。该文件将从不同的文件中调用,JSON 响应将作为 prop 发送到该文件。

【问题讨论】:

  • 您是在问如何将该字符串拆分为["Click ", "&lt;a&gt;me&lt;/a&gt;", " for help"]?您是否尝试将 URL 分配为锚标记的 href?请始终询问您的实际问题,而不是您认为可以解决但可能无法解决的解决方案。

标签: javascript html json reactjs anchor


【解决方案1】:

此答案仅适用于您的具体情况。它忽略了几个&lt;a&gt; 标签,只适用于干净的&lt;a&gt; 标签,而不是&lt;a class="whatever"&gt;。另外,请注意dangerouslySetInnerHTML,它是easy to inadvertently expose your users to a cross-site scripting

const response = {
  "url": ["http://google.com", "http://example.com"],
  "text": ["Click <a>me</a> for help", "And <a>me</a> for test"]
};

export default function App() {
  const els = response.text.map((text, i) => text.replace("<a>", `<a href=${response.url[i]}>`));

  return (
    <>
      {els.map((el, i) => <p key={i} dangerouslySetInnerHTML={{ __html: el }} />)}
    </>
  );
}

Playground

【讨论】:

  • 如果那段 HTML 中是 &lt;a class="whatever"&gt; 怎么办?
  • @ChrisG 还有很多问题需要解决,比如XSS攻击和几个标签&lt;a&gt;,我只是回答了一个具体问题OP
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 2018-02-07
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多