react native 图片加载失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react native 图片加载失败相关的知识,希望对你有一定的参考价值。

参考技术A style 已经定义了宽高
发现上面http协议的图片不能显示,下面https协议的图片可以正常加载。官网给的例子都是https的,格式png试了几个例子,发现都是https可以http不行,不知道是哪里出了问题请看
解决办法需要改一下配置用Xcode打开项目目录(假如叫 Test)下的ios文件夹再进入名为项目目录名(如本例中的 Test)的文件选中Info.plist
更改选项如下

原因:貌似是iOS客户端的设置问题,不知道是不是个例,同事的同版本的Xcode编译出来就是正常的。
这个是iOS9之后,默认Https请求,如需支持Http,修改info.plist文件添加键值对就好了

React Native Image多种加载图片方式

React-Native  Image加载图片方式解析

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 

<Image style = {{width:  300, height: 200, backgroundColor:\'white\'}} 

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

               resizeMode = {\'contain\'}/>

 

 

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

<Image style = {{width:  300, height: 300, backgroundColor:\'white\'}} 

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

               resizeMode = {\'contain\'}

 

 

 

 

 

/**
* 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 = {{width: 300, height: 300, backgroundColor:\'white\'}}>
<Image style = {{width: 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 = {{width: 300, height: 300, backgroundColor:\'white\'}}>
<Image style = {{width: 300, height: 200}}
source = {require(\'./TT2.jpg\')}
resizeMode = {\'contain\'}
/>
<Text style={styles.welcome}>加载工程文件夹下的图片</Text>
</View>
<View style = {{width: 300, height: 300, backgroundColor:\'white\'}}>
<Image style = {{width: 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 图片加载失败的主要内容,如果未能解决你的问题,请参考以下文章

react native ios端debug模式下图片无法加载问题记录

react-native iOS release build 加载本地图片和图标时出错

React Native Image多种加载图片方式

react 实现图片正在加载中 加载完成 加载失败三个阶段的

React Native 组件之Image

RN之Image