Добавление действия/расширения share в React Native

Попытка создать приложение React Native, которое вводит пункт меню в меню Share (Share Action для Android, Share Extension для iOS) и получает общие элементы в приложении. Есть ли компонент для этого, и если не самый лучший способ его построить?

Ответ 1

Я реализовал для этого модуль: https://www.npmjs.com/package/react-native-share-menu (в настоящее время работает только для Android).

Как его использовать:

Установите модуль:

npm i --save react-native-share-menu

В android/settings.gradle:

...
include ':react-native-share-menu', ':app'
project(':react-native-share-menu').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share-menu/android')

В файле android/app/build.gradle:

...
dependencies {
    ...
    compile project(':react-native-share-menu')
}

Модуль регистрации (в MainActivity.java):

import com.meedan.ShareMenuPackage;  // <--- import 

public class MainActivity extends ReactActivity {
......
    @Override
    protected List<ReactPackage> getPackages() {
        return Arrays.<ReactPackage>asList(
            new MainReactPackage(),
            new ShareMenuPackage()  // <------ add here      
        );
    }
......
}

Пример:

import React, {
    AppRegistry,
    Component,
    Text,
    View
} from 'react-native';
import ShareMenu from 'react-native-share-menu';

class Test extends Component {
    constructor(props) {
        super(props); 
        this.state = {
            sharedText: null
        };
    }

    componentWillMount() {
        var that = this;
        ShareMenu.getSharedText((text :string) => {
            if (text && text.length) {
                that.setState({ sharedText: text });
            }
        })
    }

    render() {
        var text = this.state.sharedText;
        return (
            <View>
                <Text>Shared text: {text}</Text>
            </View>
        );
    }
}

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

Ответ 2

Вы можете использовать встроенный компонент: https://facebook.github.io/react-native/docs/actionsheetios.html#content

Или вы можете использовать этот компонент, который может принять любое ваше мнение и сделать его похожим на общий ресурс iOS:

https://github.com/eyaleizenberg/react-native-custom-action-sheet

Они предназначены для iOS. Для Android (а также iOS) вы можете использовать это: https://github.com/EstebanFuentealba/react-native-share