Flatlist & Firebase: неправильный рендер при поиске - PullRequest
0 голосов
/ 27 сентября 2019

Из этой функции:

const searchApi = async (term) => {
        // console.log(term)
        await firebase.database().ref('User').on('value', (snapshot) => {
            snapshot.forEach((child) => { 
                if (child.hasChildren()) { 
                    if (child.val().name == term) {
                        console.log(child)
                        var Result = [];
                        child.forEach(function (childSnapshot) {
                            var item = childSnapshot.val();
                            item.key = childSnapshot.key;
                            Result.push(item);
                        }
                        );
                        return SetArray(Result);
                    }
                }
            }
            )
        }
        )
   }
    console.log(ReturnedArray)

Я получил 2 разных массива в качестве возврата.https://i.imgur.com/c3FxLKb.png Что я не так?

1 Ответ

0 голосов
/ 27 сентября 2019

На самом деле я попробовал это также, но моя главная проблема:

 useEffect(() => {
 firebase.database().ref('User').on('value', (snapshot) => {
            // console.log(snapshot) 
            var returnArr = [];
            snapshot.forEach(function (childSnapshot) {
                var item = childSnapshot.val();
                item.key = childSnapshot.key;
                returnArr.push(item);
            });
            return SetArray(returnArr);
        })
        // console.log(ReturnedArray)

    }, [])

После рендеринга Flatlist:

 <FlatList
      data={ReturnedArray}
      width='100%'
      ItemSeparatorComponent={this.FlatListItemSeparator}
      keyExtractor={(item, index) => 'key' + index}
      renderItem={({ item }) => {
      return (
        <Text style={style.txt}>{item.name} {item.cognome} </Text>
      )}

И из текстового ввода (как строка поиска) я запускаюфункция:

const searchApi = async(term) => {
    await firebase.database().ref('User').on('value', (snapshot) => {
        snapshot.forEach((child) => {
            if (child.hasChildren()) {
                if (child.val().name == term) {
                    var Result = [];
                    Result.push(child)
                    return SetArray(Result);
                }
            }
        })
    }

Но нет нового рендера ... Предложить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...