ViewManager receiveCommand устарела? - PullRequest
0 голосов
/ 18 февраля 2020

Я недавно заметил в исходном коде кода-реактива, что следующий метод:

public void receiveCommand(@NonNull T root, int commandId, @Nullable ReadableArray args)

класса ViewManager помечен как устаревший. Поэтому я попытался заменить ее перегруженной версией, которая не помечена как устаревшая:

public void receiveCommand(@NonNull T root, String commandId, @Nullable ReadableArray args)

, но эта никогда не вызывается. Я полагаю, что мне также может понадобиться изменить некоторые другие методы, но я не могу найти никакой информации о том, что еще нужно сделать, нет руководства по миграции, которому я мог бы следовать.

Кто-нибудь знает, как правильно использовать новый , не осуждаемый метод receiveCommand?

Исходный код ViewManager можно найти здесь: https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java

1 Ответ

0 голосов
/ 10 марта 2020

Новая не устаревшая версия receiveCommand будет вызвана, если в качестве второго аргумента dispatchViewManagerCommand из вашего кода React Native отправлена ​​строка. Больше нет необходимости переопределять getCommandsMap().

Пример:

CustomViewManager.kt (In Kotlin, должно быть легко преобразовано в Java)

class CustomViewManager : SimpleViewManager<CustomView>() {
...
    override fun createViewInstance( context: ThemedReactContext): CustomView {
        // code to instantiate your view
    }
...
    override fun getName(): String {
        return "CustomView"
    }
...
    override fun receiveCommand(view: CustomView, commandId: String, args: ReadableArray?) {
    when (commandId) {
        "doSomething" -> doSomething()
    }
}

MyComponent.js

import { View, requireNativeComponent, UIManager, findNodeHandle } from 'react-native';
...
const CustomView = requireNativeComponent('CustomView');
...
export default class MyComponent extends Component {
...
    onDoSomething = async () => {
        UIManager.dispatchViewManagerCommand(
            findNodeHandle(this.customView),
            'doSomething',
            undefined,
        );
    };
...
    render() {
        return (
            <View>
                <CustomView
                    ref={(component) => {
                        this.customView = component;
                    }}
                />
            </View>
        );
    }
}
...