React Navigation不是功能吗?

时间:2019-05-29 11:52:50

标签: react-native react-navigation expo

我正在使用React Navigation。我将引导您进入记录插入页面之后的对话。重定向时,我提供自动续订。我正在发送参数。但这是行不通的。我不知道我在哪里犯错。

我收到此错误。

  

未捕获的typeerror。 TypeError:s.handleRefresh不是函数。 (在's.handleRefresh()'中,'s.handleRefresh'未定义

LeadDetail.js页面

    static navigationOptions = ({ navigation }) => {
        const { params = {} } = navigation.state;        
        return {
            title: 'Müşteri Adayı Detay',
            headerRight: (
                <TouchableHighlight activeOpacity={0.4} underlayColor='transparent' onPress={() => navigation.navigate('CreateMeeting', { parentId: params.id, parentType: 'Lead' })} style={{marginRight: 12 }}>
                    <Icon
                        name="calendar-check-o"
                        size={25}
                        color="white"
                    />
                </TouchableHighlight>
            )
        };
    };

CreateMeeting.js页面

    dataSuccess(response) {
        this.setState({ buttonLoading: false });

        Alert.alert(
            'Tebrikler!',
            'Meeting başarılı bir şekilde kayıt edildi',
            [
                { text: 'Tamam', onPress: () => this.props.navigation.navigate('Meeting', { refreshMeeting: true }) }
            ]
        );
    }

Meeting.js页面

    static navigationOptions = ({ navigation }) => {
        const { params } = navigation.state;
        let refresh = navigation.getParam('refreshMeeting', false);

        if(refresh) {            
            params.handleRefresh();
        }
        return {
            title: 'Görüşmeler',
            headerRight: (
                <View style={{ flexDirection: 'row' }}>
                    <TouchableHighlight activeOpacity={0.4} underlayColor='transparent' onPress={navigation.getParam('setOverlay')}>
                        <Icon
                            name="filter"
                            size={25}
                            color="white"
                        />
                    </TouchableHighlight>

                    <TouchableHighlight activeOpacity={0.4} underlayColor='transparent' onPress={navigation.getParam('setModalVisible')} style={{ marginRight: 12, marginLeft: 20 }}>
                        <Icon
                            name="plus"
                            size={25}
                            color="white"
                        />
                    </TouchableHighlight>                    
                </View>
            )
        };
    };

1 个答案:

答案 0 :(得分:0)

您是否正在设置参数handleRefresh?应该不是params.handleRefresh();而不是params.refresh();吗? 另外,s.handleRefresh在您的代码中在哪里?我认为有错别字或类似的字词,并且我认为s.handleRefresh实际上是params.handleRefresh

如果所有问题都不正确,请编辑您的问题。

我不知道您在何处设置参数handleRefresh,但是如果要进行设置(请检查并在执行该操作的地方添加代码),也许这就是发生这种情况的原因。 / p>

如果您看着docs,他们没有?

  

React Navigation不保证您的屏幕组件将在标题之前安装。由于递增计数参数是在componentDidMount中设置的,因此我们可能无法在navigationOptions中使用它。这通常不会有问题,因为如果回调为null,则onPress for Button和Touchable组件将不执行任何操作。如果您在此处拥有自己的自定义组件,则应确保其行为符合预期,其新闻处理程序属性为null。

这意味着标头可以在组件调用setParams之前呈现,并且不会在第一次加载您的params。您需要进行一些检查来避免在标题首次呈现时出现该时间。

//            added some checking 
if(refresh && params && params.handleRefresh) {            
    params.handleRefresh();
}