React Native Image多种加载图片方式

摘要:
恍然大悟:React-Native并非万能,也无法完全取代原生,这就是我的一个学习误区,实际上开发过程中需要两者相辅相成实现逻辑如下:1.创建OC类,MDHFileManager并与js文件实现数据传递2.MDHFileManager:负责获取图片沙盒路径,并callback给js文件3.js:收到OC类的回调后,更新state中参数this.state.ok来处理placeholderImage˂Imagestyle={{300,height:200,backgroundColor:'white'}}source={this.state.ok?

React-NativeImage加载图片方式解析

1.加载当前工程文件夹下图片

<Image style={styles.image} source={require('./TT2.jpg')} />

2.加载当前应用沙盒文件内图片

分析:

假定图片存储在document文件夹下(document/TT1.jpg)

理论上这个加载方式和第一种默认似乎一样(都是路径),

实际上require里面的参数只能是工程文件夹内部的图片,并且参数不能是变量。

(require(this.state.localPath)这种是错误的)

正确方式:

用 uri,这里就需要在js文件中获取当前应用的沙盒路径(document路径),

于是我就天真的开始寻找js如何获取app的沙盒路径,然并卵。。。。。。

恍然大悟:React-Native并非万能,也无法完全取代原生,这就是我的一个学习误区,

实际上开发过程中需要两者相辅相成

实现逻辑如下:

1.创建OC类,MDHFileManager并与js文件实现数据传递

2.MDHFileManager: 负责获取图片沙盒路径,并callback给js文件

3.js:收到OC类的回调后,更新state中参数(state参数改变,对应Image组件就会刷新)

this.state.ok 来处理placeholderImage

<Imagestyle= {{300, height:200, backgroundColor:'white'}}

source= {this.state.ok? {uri:this.state.localImagePath} : require('./TT4.jpg')}

resizeMode= {'contain'}/>

3.加载网络图片(不过多赘述)

<Imagestyle= {{300, height:300, backgroundColor:'white'}}

source= {{uri:'http://facebook.github.io/react/img/logo_og.png'}}

resizeMode= {'contain'}

React Native Image多种加载图片方式第1张

React Native Image多种加载图片方式第2张

/**
* Sample React Native App
* https://github.com/facebook/react-native
* @flow
*/

import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
Image,
View,
NativeModules
} from 'react-native';

var FileManager = NativeModules.MDHFileManager

export default class SS extends Component {

constructor(props) {
console.log(' 1111111**********++++++++++ constructor');
super(props);
this.state = {
'localImagePath' : '',
'ok':false
}
}
componentWillMount() {

/**
* 此函数调用时机是在组件创建,并初始化了状态之后,在第一次绘制render()之前
* 可以在这里做一些业务初始化操作,也可以设置组件状态,整个生命周期中只被调用一次
*/
console.log('222222++++++++++ componentWillMount');
FileManager.imageLocalPathCallBack((path)=>{
console.log(' **********++++++++++ path' + path);
this.setState({
'localImagePath':path,
'ok':true
})
})
}

componentDidMount() {
console.log('44444++++++++++ componentDidMount');
/**
* 在组件第一次绘制后,会调用,通知组件以及加载完成。
*/
}

render() {
console.log('33333**********++++++++++ render' );
return (
<View style={styles.container}>
<View style = {{ 300, height: 300, backgroundColor:'white'}}>
<Image style = {{ 300, height: 200, backgroundColor:'white'}}
source = {this.state.ok ? {uri: this.state.localImagePath} : require('./TT4.jpg')}
resizeMode = {'contain'}/>
<Text style={styles.welcome}>加载document目录下图片</Text>
</View>
<View style = {{ 300, height: 300, backgroundColor:'white'}}>
<Image style = {{ 300, height: 200}}
source = {require('./TT2.jpg')}
resizeMode = {'contain'}
/>
<Text style={styles.welcome}>加载工程文件夹下的图片</Text>
</View>
<View style = {{ 300, height: 300, backgroundColor:'white'}}>
<Image style = {{ 300, height: 300, backgroundColor:'white'}}
source = {{uri: 'http://facebook.github.io/react/img/logo_og.png'}}
resizeMode = {'contain'}
/>
<Text style={styles.welcome}>加载网络图片</Text>
</View>
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
color:'red'
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});

AppRegistry.registerComponent('SS', () => SS);

免责声明:文章转载自《React Native Image多种加载图片方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA 邮件发送ubuntu 安装source insight3.5下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

React项目创建

前言: 构建React项目的几种方式: 构建:create-react-app 快速脚手架 构建:generator-react-webpack 构建:webpack一步一步构建 一、构建:create-react-app 快速脚手架 FaceBook官方发布了一个无需配置的、用于快速构建开发环境的脚手架工具create-react-app。 crea...

跨平台响应式开发框架DevExtreme——支持Vue 3

DevExpress技术交流群3:700924826欢迎一起进群讨论 DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NET Core或...

react 使用 eslint 的三种代码检查方案总结,多了解点--让代码更完美....

  1、介绍     ESLint 是一个可扩展,每条规则独立,被设计为完全可配置的lint工具。     可以用来检测代码,避免低级错误     可以用来规范代码的开发风格,统一代码习惯。 2、为什么使用 ESLint ?     统一代码规范 :     在开发中,可能会遇到很多不同的同事同时开发一个项目 ,或者在工作的调整中,会有接手一个项目,  ...

React入门教程第一课--从零开始构建项目

工欲善其事必先利其器,现在的node环境下,有太多好用的工具能够帮助我们更好的开发和维护管理项目。 我本人不建议什么功能都自己写,我比较喜欢代码复用。只要能找到npm包来实现的功能,坚决不自己敲代码。 本次编写程序的两个原则:1、尽量使用声明式的编程风格(声明式和命令式,不是很清楚的自己查查资料)2、能复用的决不自己编写。 任何多余的繁琐的行为都是错误的...

react.js antd-table 可编辑表格验证

最近做需求,需要在一个表格里编辑字段,验证提交.项目用的是antd的组件,看了下table组件,官网有给编辑的例子,好咧,拿过来用了下,发现问题.官网的实现写得很复杂,而且最主要的一点是只能在输入框获取焦点时调验证规则.但是在表格外面不能调用验证方法调用.与实际需求不符合,于是自己写了一个,记录下来. 需求:表格输入时验证字段,提交时点击验证字段 主要...

iOS开发之沙盒机制

iOS应用储存分以下几种: 一、沙盒基本机制 二、plist储存 三、偏好设置 四、NSKeydeArchiver归档 一、沙盒基本机制(sandbox) iOS系统相对于Android系统,或者相对于Windows系统来说比较安全的原因很多,其中有一点就是苹果推出的沙盒机制,每个应用都有自己对应的沙盒,每个应用程序之间不能相互访问非本程序的沙盒,所以,...