美文网首页
react-native 与原生交互步骤记录

react-native 与原生交互步骤记录

作者: 物联白菜 | 来源:发表于2021-12-15 13:44 被阅读0次

    官网toast例子

    此篇博主有组件封装详细讲解: https://www.jianshu.com/p/f26d994ea765

    一、创建两个文件,一个是toast模块,一个用来注册toast模块

    图片.png

    (1)、ToastModule.java

    // ToastModule.java
    
    package com.base60;
    
    import android.widget.Toast;
    
    import com.facebook.react.bridge.NativeModule;
    import com.facebook.react.bridge.ReactApplicationContext;
    import com.facebook.react.bridge.ReactContext;
    import com.facebook.react.bridge.ReactContextBaseJavaModule;
    import com.facebook.react.bridge.ReactMethod;
    
    import java.util.Map;
    import java.util.HashMap;
    
    public class ToastModule extends ReactContextBaseJavaModule {
      private static ReactApplicationContext reactContext;
    
      private static final String DURATION_SHORT_KEY = "SHORT";
      private static final String DURATION_LONG_KEY = "LONG";
    
      public ToastModule(ReactApplicationContext context) {
        super(context);
        reactContext = context;
      }
    
            @Override
            public String getName() {
              return "ToastExample";
            };
    
             @Override
             public Map<String, Object> getConstants() {
               final Map<String, Object> constants = new HashMap<>();
               constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
               constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
               return constants;
             };
    
              @ReactMethod
              public void show(String message, int duration) {
                Toast.makeText(getReactApplicationContext(), message, duration).show();
              };
    }
    
    

    (2)、注册ToastModule模块

    // CustomToastPackage.java
    
    package com.base60;
    
    import com.facebook.react.ReactPackage;
    import com.facebook.react.bridge.NativeModule;
    import com.facebook.react.bridge.ReactApplicationContext;
    import com.facebook.react.uimanager.ViewManager;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class CustomToastPackage implements ReactPackage {
    
      @Override
      public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
      }
    
      @Override
      public List<NativeModule> createNativeModules(
                                  ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
    
        modules.add(new ToastModule(reactContext));   //要对应上名字
    
        return modules;
      }
    
    }
    
    

    二、MainApplication.java中文件的getPackages方法中提供

    图片.png

    三、我们使用原生模块是 NativeModules.xxx , 也可以封装成js模块

    若是不封装则直接使用NativeModules.ToastExample.show('Awesome', ToastExample.LONG)就可以了
    封装使用则如下
    js 模块 ToastExample.js

    
    import { NativeModules } from 'react-native';
    // ToastModule.java 中 ToastExample 定义的
    // public String getName()中返回的字符串
    export default NativeModules.ToastExample;
    
    

    四、页面使用

    import React, {Component} from 'react';
    import {View, Text, StyleSheet, Image, TouchableOpacity} from 'react-native'
    import TXCloudVedioView from "../common/TXCloudVideoView";
    import ToastExample from '../ToastExample';
    
    class Test extends Component {
        constructor(props) {
            super(props);
            this.state = {}
        }
    
        componentDidMount() {
        }
    
        ToShow(){
            ToastExample.show('Awesome', ToastExample.LONG);
        }
    
        render() {
            return (
                <View style={{flex: 1}}>
                    <View style={{height:200,width:'100%',backgroundColor:'#ddd'}}>
                        <TXCloudVedioView
                            style={{width: '100%', height: '100%'}}
                            url={`rtmp://58.200.131.2:1935/livetv/hunantv`}
                            // url={`rtmp://58.200.131.2:1935/livetv/cctv13`}
                        />
                    </View>
                    <TouchableOpacity onPress={()=>this.ToShow()}>
                        <Text style={{padding:20,backgroundColor:'#999'}}>按钮</Text>
                    </TouchableOpacity>
                </View>
            );
        }
    }
    
    export default Test;
    const styles = StyleSheet.create({})
    
    

    相关文章

      网友评论

          本文标题:react-native 与原生交互步骤记录

          本文链接:https://www.haomeiwen.com/subject/anaufrtx.html