参考React Native官网,在RN中调用Android UI 组件(RCTImageView)时候,出现如下错误。
Error while updating property of 'src' of a view managed by MyRCTImageView
java.lang.String can not be cast to com.facebook.react.bridge.ReadableArray
下面是我的部分代码。
// App.js
//RN中主界面 调用ImageView组件 传入src参数
import ImageView from './ImageView';
...
render(){
return(
<ImageView
src={this.state.imageSrc}
borderRadius={this.state.borderRadius}
resizeMode={this.state.resizeMode}
/>
);
}
//ImageView.js
// RN中对android 原生UI组件封装和调用 设置src属性格式为PropTypes.string
let iface = {
name: 'ImageView',
propTypes: {
src: PropTypes.string,
borderRadius: PropTypes.number,
resizeMode: PropTypes.oneOf(['cover', 'contain', 'stretch']),
...ViewPropTypes, // include the default view properties
},
};
const ImageView = requireNativeComponent('MyRCTImageView',iface);
export default ImageView;
从报错信息,我知道了对src应该传入一个数组类型,而不是string。我在Android中通过@ReactProp
构造了setSrc
方法。但是我不知道如何调用该方法,以及,如何在RN中对src传入一个数组。
各位知道如何解决吗? 谢谢
//ReactImageManager.java
//Android中创建的UI 组件类
public class ReactImageManager extends SimpleViewManager<ReactImageView> {
public static final String REACT_CLASS = "MyRCTImageView";
@Override
public String getName() {
return REACT_CLASS; //返回值为在RN中引用的组件名称值 RCTImageView
}
/**
* 此处创建View实例,并返回
* @param context
* @return
*/
@Override
public ReactImageView createViewInstance(ThemedReactContext context) {
return new ReactImageView(context, Fresco.newDraweeControllerBuilder(), null,null);
}
@ReactProp(name = "src" )
public void setSrc(ReactImageView view, @Nullable ReadableArray sources) {
view.setSource(sources);
}
@ReactProp(name = "borderRadius", defaultFloat = 0f)
public void setBorderRadius(ReactImageView view, float borderRadius) {
view.setBorderRadius(borderRadius);
}
@ReactProp(name = ViewProps.RESIZE_MODE)
public void setResizeMode(ReactImageView view, @Nullable String resizeMode) {
view.setScaleType(ImageResizeMode.toScaleType(resizeMode));
}
}
你的setSrc方法接收一个readableArray,然而你在实际调用的时候却传了一个String, 所以报错。
解决方法:
<ImageView src={['']} />
或者更改setSrc的形参类型为String