undefined не является объектом React Native - PullRequest
0 голосов
/ 23 мая 2018

Я получаю известную ошибку undefined - это не объект при попытке вызвать this.refs из контекста navigationOptions.

Лучше, если я объясню с помощью кода:

 static navigationOptions = ({ navigation, screenProps }) => ({
        headerTitle: 'my app',
        title: 'my app',
        headerTitleStyle: {
            textAlign: "center",
            flex: 1,
        },
        headerLeft:
            <TouchableOpacity style={{padding: 15, marginLeft: 5}} onPress={() => { navigation.state.params.goBack(navigation.state.params.canGoBack) }}>
                {navigation.state.params.canGoBack ? <Text>back</Text>: <Text>close</Text>}
            </TouchableOpacity>,
    });


    componentDidMount() {
            this.props.navigation.setParams({goBack: this.onBack});
            this.props.navigation.setParams({canGoBack: this.state.canGoBack});
            Keyboard.dismiss();
        }

   onBack(canGoBack) {
        console.log(canGoBack);
        if(canGoBack){
            this.refs[WEBVIEW_REF].goBack(); // here is the error happening, somehow I can access this.refs.
        }
    }

    onNavigationStateChange(navState) {
        this.setState({
            canGoBack: navState.canGoBack
        });
        this.props.navigation.setParams({
            canGoBack: this.state.canGoBack,
        });
        console.log("some action happened: " + this.state.canGoBack);

    }

Кто-нибудь знает, как это решить?

1 Ответ

0 голосов
/ 23 мая 2018

Проблема в том, что вы теряете контекст при использовании this.onBack

. Вы должны убедиться, что this.onBack вызывается с контекстом компонента, и вы можете сделать это одним из следующих способов:

  • Использование arrow functions: this.props.navigation.setParams({goBack: (e) => this.onBack(e)});

  • Привязать this к вашей функции: this.props.navigation.setParams({goBack: this.onBack.bind(this)});

...