在我的 React Native 应用程序中,我正在提取具有如下原始 HTML 元素的 JSON 数据:<p>This is some text. Let’s figure out...</p>
我已将数据添加到我的应用程序的视图中,如下所示:
<Text>{this.props.content}</Text>
问题是 HTML 是原始的,它不像在浏览器中那样呈现。有没有办法让我的 JSON 数据在我的应用程序视图中看起来像在浏览器中一样?
在我的 React Native 应用程序中,我正在提取具有如下原始 HTML 元素的 JSON 数据:<p>This is some text. Let’s figure out...</p>
我已将数据添加到我的应用程序的视图中,如下所示:
<Text>{this.props.content}</Text>
问题是 HTML 是原始的,它不像在浏览器中那样呈现。有没有办法让我的 JSON 数据在我的应用程序视图中看起来像在浏览器中一样?
2021 年 1 月编辑:React Native 文档目前推荐 React Native WebView:
<WebView
originWhitelist={['*']}
source={{ html: '<p>Here I am</p>' }}
/>
https://github.com/react-native-webview/react-native-webview
如果您不想嵌入WebView
,也有第三方库可以将 HTML 呈现为原生视图:
2017 年 3 月编辑:该html
道具已被弃用。改用source
:
<WebView source={{html: '<p>Here I am</p>'}} />
https://facebook.github.io/react-native/docs/webview.html#html
感谢贾斯汀指出这一点。
2017 年 2 月编辑:PR 不久前被接受,因此要在 React Native 中呈现 HTML,只需:
<WebView html={'<p>Here I am</p>'} />
原答案:
我认为目前这是不可能的。您看到的行为是预期的,因为 Text 组件只输出......好吧,文本。您需要另一个输出 HTML 的组件 - 这就是WebView。
不幸的是,现在没有办法直接在这个组件上设置 HTML:
https://github.com/facebook/react-native/issues/506
但是我刚刚创建了这个 PR,它实现了这个特性的一个基本版本,所以希望它会很快以某种形式登陆。
我找到了这个组件。https://github.com/jsdf/react-native-htmlview
该组件采用 HTML 内容并将其呈现为原生视图,具有可自定义的样式和链接处理等。
一个纯 JavaScript react-native 组件,可将您的 HTML 呈现为 100% 原生视图。它被设计得非常可定制且易于使用,旨在能够渲染你扔给它的任何东西。
与嵌入式相比,使用此组件将改善您的应用程序内存占用和性能WebViews
。
安装
npm install react-native-render-html --save or yarn add react-native-render-html
基本用法
import React from "react";
import { ScrollView, useWindowDimensions } from "react-native";
import RenderHTML from "react-native-render-html";
const html = `
<h1>This HTML snippet is now rendered with native components !</h1>
<h2>Enjoy a webview-free and blazing fast application</h2>
<img src="https://i.imgur.com/dHLmxfO.jpg?2" />
<em style="textAlign: center;">Look at how happy this native cat is</em>
`;
export default function App() {
// Allow images to scale to available width
// with contentWidth prop.
const { width } = useWindowDimensions();
return (
<ScrollView style={{ flex: 1 }}>
<RenderHTML contentWidth={width} source={{ html }} />
</ScrollView>
);
}
您可以通过类名、标签自定义元素的样式,甚至可以为标签注册自定义渲染。更多信息在官方网站上。
我简单地使用 Js 函数替换。
<Text>{item.excerpt.rendered.replace(/<\/?[^>]+(>|$)/g, "")}</Text>
<WebView ref={'webview'} automaticallyAdjustContentInsets={false} source={require('../Assets/aboutus.html')} />
这对我有用:) 我有关于我们文件的 html 文本。
React Native 更新了 WebView 组件以允许直接呈现 html。这是一个对我有用的例子
var htmlCode = "<b>I am rendered in a <i>WebView</i></b>";
<WebView
ref={'webview'}
automaticallyAdjustContentInsets={false}
style={styles.webView}
html={htmlCode} />