Zomato API 용 React Native로 검색 기능 생성

쿨한 남자

저는 React Native와 함께 API를 사용하는 것이 처음입니다. 몇 가지 알아 냈지만 지금 시도하고있는 것은 검색 기능을 만드는 것입니다. 지금까지 몇 가지를 시도했지만 함수가 호출되지 않거나 객체로 호출되는 함수에 대한 오류가 발생합니다. 또한이 API 호출을 위해 axios를 사용하고 있습니다.

여기 내가 지금까지 얻은 것입니다.

export default class CategoryScreen extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            data: [],
            isVisible: true,
            city: '280',
            isLoading: true,
            search: ''
        }
    }

    async componentDidMount() {
        try {
            const id = this.props.navigation.state.params.category;
            const city = this.state.city;

            const result = await axios.request({
                method: 'get',
                url: `https://developers.zomato.com/api/v2.1/search?city_id=${city}&category=${id}`,
                headers: {
                    'Content-Type': 'application/json',
                    'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
                }
            });
            this.setState({ data: result.data.restaurants });
        } catch (err) {
            console.log(err);
        } finally {
            this.setState({ isLoading: false });
        }
    }

    updateSearch = search => {
        this.setState({ search });
    };

    searchReq = () => {
        axios.request({
            method: 'get',
            url: `https://developers.zomato.com/api/v2.1/search?city_id=${city}&q${search}&category=${id}`,
            header: {
                'Content-Type': 'application/json',
                'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
            }
        });
        this.setState({ data: result.data.restaurants });
    }

    render() {
        const { search } = this.state;
        return (
            <SearchBar
                placeholder="Type Here..."
                onChangeText={this.updateSearch}
                onSubmitEditing={this.searchReq}
                value={search}
            />
        )
    }
}

좀 더 진보 된 방법이 있다면 새로운 것을 배우는 데 열려 있고, 내가하고 싶은 것을 성취하고 싶습니다. 또한 현재의 방법이 효과가 있었다면 사용자가 그 사이에 공백을 추가하면 여전히 문제가 발생할 수 있다는 것을 알고 있으므로 새롭고 더 발전된 방법을 배울 수 있습니다.

여기 엑스포 스낵입니다 https://snack.expo.io/SJoIr8u1I

Sdushan

검색 기능에서 몇 가지 실수를 발견했습니다.

  1. 당신은 city, search&에없는 id가치 를 얻어야합니다searchReq()
  2. result.data.restaurants가치를 할당하기 전에 가치 를 얻어야 합니다.data: result.data.restaurants

이미 할당했기 때문에 this.setState({ search })그 값 searchReq()은 아래와 같습니다.

searchReq = async () => {
    try {
        const result = await axios.request({
            method: 'get',
            url: `https://developers.zomato.com/api/v2.1/search?city_id=280&q${this.state.search}&category=11`,
            headers: {
                'Content-Type': 'application/json',
                'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
            }
        });
        this.setState({ data: result.data.restaurants });
    } catch (error) {
        this.setState({ data: [] });
        console.log(error);
    }
}

따라서 전체 소스 코드는 다음과 같습니다.

import React, { Component } from 'react';
import {
    View,
    Text,
    FlatList,
    StyleSheet,
    TouchableOpacity,
    Dimensions,
    ActivityIndicator,
} from 'react-native';
import { Card, Image, SearchBar, Icon } from 'react-native-elements';
import Logo from '../assets/Logo.png'
import axios from 'axios';

const SCREEN_WIDTH = Dimensions.get('window').width;
const SCREEN_HEIGHT = Dimensions.get('window').height;

export default class CategoryScreen extends Component {

    constructor(props) {
        super(props);
        this.state = {
            data: [],
            isVisible: true,
            city: '280',
            isLoading: true,
            search: ''
        }
    }

    async componentDidMount() {
        try {
            const result = await axios.request({
                method: 'get',
                url: `https://developers.zomato.com/api/v2.1/search?city_id=280&category=11`,
                headers: {
                    'Content-Type': 'application/json',
                    'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
                }
            });
            this.setState({
                data: result.data.restaurants,
                isLoading: false
            });
        } catch (err) {
            this.setState({ isLoading: false });
            console.log(err);
        }
    }

    updateSearch = search => {
        this.setState({ search });
    };

    searchReq = async () => {
        try {
            const result = await axios.request({
                method: 'get',
                url: `https://developers.zomato.com/api/v2.1/search?city_id=280&q${this.state.search}&category=11`,
                headers: {
                    'Content-Type': 'application/json',
                    'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
                }
            });
            this.setState({ data: result.data.restaurants });
        } catch (error) {
            this.setState({ data: [] });
            console.log(error);
        }
    }

    render() {
        const { search } = this.state;
        return (
            <View>
                <View style={styles.header}>
                    <Image source={Logo} style={{ resizeMode: 'stretch', width: 50, height: 50, alignSelf: 'center', justifyContent: 'center', marginTop: 30 }} />
                    <Icon
                        raised
                        name='location'
                        type='octicon'
                        color='#f50'
                        onPress={() => this.setState({ isModalVisible: !this.state.isModalVisible })}
                        containerStyle={{ alignSelf: 'flex-end', marginRight: 20, marginTop: -60 }} />
                </View>
                <SearchBar
                    placeholder="Type Here..."
                    onChangeText={this.updateSearch}
                    onSubmitEditing={this.searchReq}
                    value={search}
                    inputStyle={{ backgroundColor: 'steelblue', color: 'white' }}
                    inputContainerStyle={{ backgroundColor: 'steelblue', fontColor: 'white' }}
                    containerStyle={{ backgroundColor: 'steelblue', borderBottomColor: 'transparent', borderTopColor: 'transparent' }}
                    placeholderTextColor='white'
                />
                {
                    this.state.isLoading ?
                        <View style={{ flex: 1, marginTop: 200 }}>
                            <ActivityIndicator style={{ color: 'red' }} />
                        </View> :
                        (
                            this.state.data.length == 0 ?
                                <View style={{ flex: 1, padding: 20, marginTop: 100 }}>
                                    <Text style={{ color: '#000', fontWeight: 'bold' }}>No restaurants from selected category</Text>
                                </View> :
                                <View style={{ flexDirection: 'column' }}>
                                    <FlatList
                                        keyExtractor={item => item.id}
                                        data={this.state.data}
                                        renderItem={({ item }) =>
                                            <TouchableOpacity onPress={() => console.log(item.restaurant.location.city)}>
                                                <Card style={{ width: SCREEN_WIDTH }}>
                                                    <Image style={{ width: SCREEN_WIDTH / 3, height: 130 }} resizeMode="stretch" source={{ uri: item.restaurant.thumb }} />
                                                    <Text style={{ color: '#000', fontWeight: 'bold' }}>{item.restaurant.name} </Text>
                                                </Card>
                                            </TouchableOpacity>
                                        }
                                    />
                                </View>
                        )
                }
            </View>
        )
    }
}

const styles = StyleSheet.create({
    header: {
        backgroundColor: '#ff4714',
        height: SCREEN_HEIGHT / 8,

    },
});

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

GDAA (Android 용 Google Drive Api)로 DB 파일 생성 / 편집 / 검색

분류에서Dev

React Native-기능적 구성 요소를 사용한 탐색

분류에서Dev

사용자 검색 기능은 어떻게 생성합니까?

분류에서Dev

React에서 Context API 및 기능 구성 요소를 서비스로 사용

분류에서Dev

React Native 유효성 검사 기능이 작동하지 않음

분류에서Dev

프로세스 생성 시간을 검색하는 API (Linux)

분류에서Dev

React Native Firebase 검색 목록보기

분류에서Dev

if 함수로 검색 기능을 사용하는 방법

분류에서Dev

NextJS + React에서 API 생성 콘텐츠로 사용자 정의 가능한 동적 URL을 생성하려면 어떻게해야합니까?

분류에서Dev

생년월일을 기준으로 사용자 연령 검색

분류에서Dev

후순위 순회 재귀를 사용한 Depth First 검색으로 예기치 않은 출력이 생성됨

분류에서Dev

React : 입력 생성 기능

분류에서Dev

smooch.io API를 사용하여 챗봇 생성 및 기능

분류에서Dev

Context API React Native를 사용하여 데이터를 검색 할 수 없습니다.

분류에서Dev

React Native fetch ()를 사용하여 API에서 잘못된 JSON을 검색하는 방법

분류에서Dev

JDBI SQL Object API를 사용하여 동시 검색 또는 새 행 생성

분류에서Dev

Google 사용자 설정 검색 엔진에서 자동 완성 기능 사용

분류에서Dev

검색 표현식을 기반으로 CloudWatch 경보 생성

분류에서Dev

색상 검사기를 사용하여 생성 된 imatest 색상 오류 차트의 배경 생성?

분류에서Dev

Swift를 사용하여 검색 가능한 PDF를 생성하는 방법

분류에서Dev

Wikimedia API 검색 기능 문제

분류에서Dev

JSON API에 대한 검색 기능

분류에서Dev

Twitter API, 달러 기호로 검색

분류에서Dev

Google 검색 API에서 거리 기능으로 문서 필드를 반경으로 사용할 수 있습니까?

분류에서Dev

React Native로 검색 및 필터링

분류에서Dev

Google의 Vision API를 사용하여 PDF (검색 불가능)를 검색 가능한 PDF로 변환하려면 어떻게해야합니까?

분류에서Dev

pysftp를 사용하여 파일 크기 검색 성능 최적화

분류에서Dev

성 PHP로 사용자 검색

분류에서Dev

PhP를 사용한 SQL 검색 기능

Related 관련 기사

  1. 1

    GDAA (Android 용 Google Drive Api)로 DB 파일 생성 / 편집 / 검색

  2. 2

    React Native-기능적 구성 요소를 사용한 탐색

  3. 3

    사용자 검색 기능은 어떻게 생성합니까?

  4. 4

    React에서 Context API 및 기능 구성 요소를 서비스로 사용

  5. 5

    React Native 유효성 검사 기능이 작동하지 않음

  6. 6

    프로세스 생성 시간을 검색하는 API (Linux)

  7. 7

    React Native Firebase 검색 목록보기

  8. 8

    if 함수로 검색 기능을 사용하는 방법

  9. 9

    NextJS + React에서 API 생성 콘텐츠로 사용자 정의 가능한 동적 URL을 생성하려면 어떻게해야합니까?

  10. 10

    생년월일을 기준으로 사용자 연령 검색

  11. 11

    후순위 순회 재귀를 사용한 Depth First 검색으로 예기치 않은 출력이 생성됨

  12. 12

    React : 입력 생성 기능

  13. 13

    smooch.io API를 사용하여 챗봇 생성 및 기능

  14. 14

    Context API React Native를 사용하여 데이터를 검색 할 수 없습니다.

  15. 15

    React Native fetch ()를 사용하여 API에서 잘못된 JSON을 검색하는 방법

  16. 16

    JDBI SQL Object API를 사용하여 동시 검색 또는 새 행 생성

  17. 17

    Google 사용자 설정 검색 엔진에서 자동 완성 기능 사용

  18. 18

    검색 표현식을 기반으로 CloudWatch 경보 생성

  19. 19

    색상 검사기를 사용하여 생성 된 imatest 색상 오류 차트의 배경 생성?

  20. 20

    Swift를 사용하여 검색 가능한 PDF를 생성하는 방법

  21. 21

    Wikimedia API 검색 기능 문제

  22. 22

    JSON API에 대한 검색 기능

  23. 23

    Twitter API, 달러 기호로 검색

  24. 24

    Google 검색 API에서 거리 기능으로 문서 필드를 반경으로 사용할 수 있습니까?

  25. 25

    React Native로 검색 및 필터링

  26. 26

    Google의 Vision API를 사용하여 PDF (검색 불가능)를 검색 가능한 PDF로 변환하려면 어떻게해야합니까?

  27. 27

    pysftp를 사용하여 파일 크기 검색 성능 최적화

  28. 28

    성 PHP로 사용자 검색

  29. 29

    PhP를 사용한 SQL 검색 기능

뜨겁다태그

보관