abdurrahmanekr / bana-istedigini-sor

Yeni paylaştığım yazılardan haberdar olmak için bloguma abone olun:
https://avarekodcu.com
12 stars 1 forks source link

React Native API ile Alt kategoriye veri basmak #76

Closed mehmetarikaan closed 5 years ago

mehmetarikaan commented 5 years ago

Merhaba, API'den gelen bi datam var. Bu datayı flatliste basıyorum. Her item'in bi alt kategorisi var. Bu alt kategorileri nasıl yazdırabilirim? (URL'de default id'im var. Seçili olan itemin parent id'sini alıp tekrar istek atmam gerekiyor bu kısmı çözemedim.) Şu anahtar kelimeyi arat bulursun dediğiniz kelime önerilerinize de açığım. Şimdiden teşekkürler.

abdurrahmanekr commented 5 years ago

Merhaba, tıklanan parent nesneyi bulmak için sanırsam model olarak göndermeniz gerekiyor. Tam olarak anlatmak için şöyle bir veriniz olduğunu düşünüyorum:

var data = [
    {
        id: '1',
        type: 'parent',
        text: 'Arabalar',
        subcategories: [
            {
                id: '1',
                type: 'child',
                text: 'Tesla'
            },
            {
                id: '2',
                type: 'child',
                text: 'Mercedes'
            }
        ]
    }
]

Böyle bir yapı oluşturabilirsiniz. Eğer size gelen veri sadece üst kategorileri getiriyor siz alt kategorileri getirmek için ayrı bir istek atıyorsanız yine bu model'i kullanabilirsiniz.

Herhangi kategorinin id değeri ile istek atıp alt kategoriler geldiğinde state'de veya başka bir değişkende tuttuğunuz değere ekleyip setState yaparak görünmesini sağlayabilirsiniz.

Örnek (mantık) kodu:

import React, { Component } from 'react';

export class Kategori extends Component {
    constructor(props) {
        super(props);

        this.state = {
            data: []
        };

        this.getSubCategory = this.getSubCategory.bind(this);
    }

    getSubCategory(id) {
        var self = this;

        fetch('servis')
        .then(res => {
            // res böyle geldiğini varsayıyorum
            // [{id: '1', type: 'child', text: 'Tesla'}, {id: '2', type: 'child', text: 'Mercedes'} ]
            if (res && res.length > 0) {
                // alt kategorisi getirilmek istenen kategori
                var category = self.state.data.find(x => x.id === id);

                // kategoriye alt kategori ekledik
                category.subcategories = res;

                // sonra state'i güncelledik
                self.setState({
                    data: self.state.data,
                })
            }
        })
    }

    render() {
        return (
            <View>
                {
                    this.state.data.map(x => (
                        <View>
                            <Text
                                onPress={() => this.getSubCategory(x.id)}>
                                {x.text}
                            </Text>
                        </View>
                        {
                            // burada alt kategoriler yazdırıyorsunuz
                            x.subcategories &&
                            x.subcategories.length > 0 &&
                            x.subcategories.map(y => (
                                <View>
                                    <Text>
                                        {y.text}
                                    </Text>
                                </View>
                            ))
                        }
                    ))
                }
            </View>
        );
    }
}

Umarım anlatabilmişimdir.