React Native, TypeError: undefined не является объектом Когда я использую функцию onPress - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь вызвать onPress touchableopacity для like_click (), но он выдает ошибку (Undefined не является объектом).

Я также пытался вызвать метод с этим, но этотакже выдает ошибку (не могу найти переменную 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 голосов
/ 17 октября 2019

попробуйте использовать функции жирных стрелок 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, чтобы проверить, вызывается ли функция. И если он вызывается, это означает, что внутри вашего вызова API like_click func есть ошибка. Проверьте это.

...