VideoPlayerView
是Android和IOS为我的特定项目制作的自定义本机组件。
以下是导出由VideoPlayerView
ReactVideoManager.java
的本机模块的代码的一部分
public class ReactVideoManager extends SimpleViewManager<MeasureChangedVideoView> {
public static final String REACT_CLASS = "VideoPlayerView";
private ThemedReactContext mReactContext;
@Override
public String getName() {
return REACT_CLASS;
}
@Override
protected MeasureChangedVideoView createViewInstance(ThemedReactContext reactContext) {
mReactContext = reactContext;
return new MeasureChangedVideoView(reactContext);
}
@ReactProp(name = "url")
public void setUrl(MeasureChangedVideoView view, @Nullable String url) {
Uri uri = Uri.parse(url);
view.setVideoURI(uri);
view.setMediaController(new MediaController(mReactContext));
view.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
}
以下是为模块找到的错误日志:
Error: `VideoPlayer` has no propType for native prop `VideoPlayerView.scaleY` of native type `number`
此本机视图的相应js组件是VideoPlayer.js:
var React = require('react-native');
var { requireNativeComponent } = React;
class VideoPlayer extends React.Component {
render() {
return <VideoPlayerView {...this.props} />;
}
}
VideoPlayer.propTypes = {
url: React.PropTypes.string
};
var VideoPlayerView = requireNativeComponent('VideoPlayerView', VideoPlayer);
module.exports = VideoPlayer;
用于在不同项目中工作的相同模块B.发现的唯一区别是项目B中存在react.gradle文件。
绝对没有关于生成react.gradle文件的线索。此外,我尝试重新启动打包器,再次清理项目构建。
项目中使用的gradle依赖是
compile "com.facebook.react:react-native:0.14.+"
答案 0 :(得分:1)
一定要使用最新版本,文档https://facebook.github.io/react-native/docs/native-components-android.html#content中指定的方式应该可以正常使用。
所以事实证明我使用的是React版本0.13+(在package.json中),并且使用@Reactprop注释添加属性的方式是在gradle 0.14依赖项中引入的,这种方式并不适用于旧版本的React-native(0.13)。
如果由于某种原因你碰巧在0.13或之前工作,必须遵循https://github.com/facebook/react-native/issues/3478中指定的手动混合道具的方式。