我使用onPress函数时,React Native,TypeError:undefined不是对象

时间:2019-10-17 06:48:22

标签: react-native react-native-snap-carousel

我正在尝试为like_click()调用touchableopacity的onPress,但它给了我一个错误(未定义不是对象)。

我也尝试使用此方法来调用该方法,但这也给了我一个错误(找不到变量like_click)

constructor(props){
        super(props)
        this.logout = this.logout.bind(this);
        this.state = {
            username:"",
            password:"",
            token:"",
            firstName:"",
            dataSource:""
        }
        **this.like_click = this.like_click.bind(this);**
        this.dislike_click = this.dislike_click.bind(this);
        this.workjoyPage = this.workjoyPage.bind(this);
    }

**like_click(expr_id){
        console.log(this.state.token);
        console.log(expr_id);
        var headers = new Headers();
        let auth ='Bearer '+this.state.token;
        headers.append("Authorization",auth);        
        fetch("http://diwo.nu/public/api/addExpLikes/"+expr_id, {
            method: 'GET',        
            headers: headers,
        })
        .then((response) => response.json())
        .then((responseJson) => {
            if(responseJson.status==200){
                console.log(responseJson);
                this.componentDidMount();
            }
        }).catch((error) =>{
            console.error(error);
        });
    }**

 _renderItem ({item, index}) {
        var {height, width} = Dimensions.get('window');
        return (
            <View style={styles.dynamic_list_view}>                    
                <Card borderRadius={15} containerStyle={{marginLeft:12,backgroundColor:'#00a1ff'}}>
                    <View style={{paddingRight:10}}>
                            {item.user_likes==0?
**<TouchableOpacity onPress={()=>this.like_click(item.id)}>
    <Image style={{width:20, height:20,marginTop:10,marginRight:5}} source={require('../../uploads/heart1.png')} />
</TouchableOpacity>**
:
<TouchableOpacity onPress={()=>dislike_click(item.id)}>

</TouchableOpacity>}                           
                    </View>
                </Card>
            </View>
        );
    }
    render() {

            <View style={{flex:2.2}}>
                <Carousel
                    ref={(c) => { this._carousel = c; }}
                    data={this.state.dataSource}
                    **renderItem={this._renderItem}**
                    sliderWidth={350}
                    itemWidth={350}
                    autoplay={true}
                    autoplayDelay={2000}
                    loop={true}
                />
            </View>
        }

单击图像时,如何通过函数调用。请帮忙。

1 个答案:

答案 0 :(得分:0)

尝试使用es6粗箭头功能,因为它使代码更容易,因此您不必显式绑定此代码。

like_click = (expr_id) =>{
        console.log(this.state.token);
        console.log(expr_id);
        var headers = new Headers();
        let auth ='Bearer '+this.state.token;
        headers.append("Authorization",auth);        
        fetch("http://diwo.nu/public/api/addExpLikes/"+expr_id, {
            method: 'GET',        
            headers: headers,
        })
        .then((response) => response.json())
        .then((responseJson) => {
            if(responseJson.status==200){
                console.log(responseJson);
                this.componentDidMount();
            }
        }).catch((error) =>{
            console.error(error);
        });
    }**

以及

之类的可触摸不透明通话中
<TouchableOpacity onPress={()=>this.like_click(item.id)}>

在like_click之后,您可以尝试console.log检查该函数是否被调用。如果调用了它,则意味着like_click func API调用中存在错误。请检查一下。