1、react-native-render-html和react-native-htmlview的比较

App项目中需要用到解析HTML的组件,在github上面找到比较合适的两款,react-native-render-html(RNRH)和react-native-htmlview(RNH)。子啊实际的使用过程中,两个各自有不同的问题。

首先RNRH容易红屏,这个使用过的人肯定有体会,而RNH则在图片方面比较不好处理,最终我选择了RNRH。

2、使用

安装什么的就不说了

import HTML from "react-native-render-html";

然后在组件的render中

<HTMLignoredStyles={["font-family", "transform", "display", "border-style", "max-width", "default-src", "loadingIndicatorSrc"]}renderers={renderer}debug={true}tagsStyles={{p: {fontSize: 16}, span: {fontSize: 16}}}html={this.state.htmlContent}imagesMaxWidth={width}/>

注意组件的ignoredStyles属性,这里配置的是需要忽略的css属性,很多导致崩溃的原因就是有些css属性无法解析。所以使用过程中,查看日志很重要,哪个属性导致的崩溃,可以添加在这里。

renderers的写法如下,主要处理图片

const width = Dimensions.get('window').width;
const renderer = {img: (htmlAttribs, children, convertedCSSStyles, passProps) => {const wid = htmlAttribs.width ? htmlAttribs.width : width;const hei = htmlAttribs.height ? htmlAttribs.height * (width - 20) / wid : 200;console.log(htmlAttribs.src);imageArr.push({index: i, uri: htmlAttribs.src});//将图片放入overlay中点击查看this.setState({images: imageArr});i++;return (<TouchableNativeFeedbackkey={i}onPress={() => {let index = 0;this.state.images.map((item) => {if (item.uri === htmlAttribs.src) {index = item.index;}});this.setState({overLayVisible: true,overLayImageIndex: index});}}><Imagekey={htmlAttribs.src}style={{height: hei, width: width - 20}}resizeMode='contain'source={{uri: htmlAttribs.src}}/></TouchableNativeFeedback>)},ul: (htmlAttribs, children, passProps) => {return <Text style={{fontWeight: 'normal',marginLeft: 10,paddingLeft: 0,color: '#333',fontSize: 14,fontFamily: 'roboto_slab'}} {...passProps}>{children}</Text>},
};

采用这种方式可以保持图片原来的长宽比,不是导致图片失真或者变形。

另外我的后台文本编辑器为百度的Ueditor,两者配合基本满分。

react-native中react-native-render-html的使用(不崩溃)相关推荐

  1. react navigation中使用goBack返回指定页面

    goBack 首先, 现在看一下react navigation官网中对goBack的描述: goBack的参数为页面的key, 这个key是系统随机分配的, 而不是手动设置的routeName, 所 ...

  2. native react 折线图_react native中使用echarts

    开发平台:mac pro node版本:v8.11.2 npm版本:6.4.1 react-native版本:0.57.8 native-echarts版本:^0.5.0 目标平台:android端收 ...

  3. React Native中pointerEvent属性

    在React Native界面开发中, 如果使用绝对定位布局,在代码运行时的某个时刻有可能会遮盖住它的下方的某个组件.这是因为绝对定位只是说这个组件的位置由它父组件的边框决定. 绝对定位的组件可以被认 ...

  4. Android之React Native 中组件的生命周期

    React Native 中组件的生命周期 概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对 ...

  5. android 倒计时封装,react native中的聊天气泡及timer封装成的发送验证码倒计时

    其实,今天我想把我近期遇到的坑都总结一下: 1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以用navigationActions 2.父子组件的传值,一可 ...

  6. 如何在React Native中创建精美的动画加载器

    by Vikrant Negi 通过Vikrant Negi 如何在React Native中创建精美的动画加载器 (How to create a beautifully animated load ...

  7. 如何在React Native中构建项目并管理静态资源

    by Khoa Pham 通过Khoa Pham 如何在React Native中构建项目并管理静态资源 (How to structure your project and manage stati ...

  8. 在React / React Native中使用构造函数与getInitialState有什么区别?

    本文翻译自:What is the difference between using constructor vs getInitialState in React / React Native? I ...

  9. React Native中的TextInput (补充)

    React Native中的TextInput (补充) TextInput 的属性: import React, { Component } from 'react'; import { AppRe ...

  10. 在 React Native 中实现 3D 动画

    本文的范围将涵盖对 Three.js 库和 Animated API 的探索. 您应该具备 JavaScript 和 React Native 的基本知识才能继续学习: 要了解更多关于可以在 Reac ...

最新文章

  1. JMeter学习-017-java.net.SocketException: Permission denied: connect 解决方案
  2. 解决pip is configured with locations that require TLS/SSL问题
  3. 趣事:一根网线发起的攻击
  4. 深度译文:机器学习那些事
  5. form标签的action之前 加密_金士顿KC2000自加密功能测试
  6. 外部 Storage Provider - 每天5分钟玩转 Docker 容器技术(149)
  7. 谨防代理木马和怕米释放有毒程序
  8. 筋斗云newcloud错误码列表
  9. IntelliJ IDEA lombok插件的安装和使用
  10. 南阳理工ACM 题目252 01串
  11. 计算机金山打字基础,金山打字通电脑版
  12. 努比亚手机老是出现android,努比亚又一老机型迅速升级Android 5.0
  13. 用ipv6地址打开samba共享目录
  14. WPS如何去除分割线
  15. 虚拟机中ip地址总是自动变化解决办法
  16. 排查并解决磁盘满了问题
  17. 《数据库》_考研复试_面试篇
  18. 【AI4Code】CodeX:《Evaluating Large Language Models Trained on Code》(OpenAI)
  19. 创业过程中的63个技术问题
  20. Opencv之边缘检测卷积算子(roberts与prewitt)

热门文章

  1. 【java】 文件批量下载并压缩为zip压缩包
  2. Mysql8.0 子数据库账户及密码创建和赋权
  3. 面试常见SQL练习题
  4. java 直角坐标系_直角坐标系(Java)
  5. 人工蜂群算法(Artificial Bee Colony, ABC)MATALAB代码详细解析
  6. 如何使用java连接网易企业邮箱
  7. 高通芯片联机读取修改串码 meid ESN wifi 蓝牙 sn等参数的操作解析{二}
  8. 2020-10-23
  9. 计算机电缆芯数,DJYVP22电缆|电线(直径、重量、芯数)
  10. 介绍一款迷你版win10系统!电脑内存小的用户可入