будет выглядеть так:

ользую React Native 0.49. У меня есть данные, полученные из firebase, список пользователейusers/каждый элемент в этом списке был установлен такfirebase.database().ref('users/' + userId).set(userInfo) userId - этоuid текущего пользователя.

Теперь я возвращаюсь (в действиях - избыточный):

export function getPeople(){
    return (dispatch) => {
        dispatch(getPeopleRequest());
        getData().then(result => {
            dispatch(getPeopleSuccess(result.val()))
        })
        .catch(error => {
            dispatch(getPeopleFailure(error))
        }); 
    }
}

const getData = () => {
    const userRef = firebase.database().ref('users/').limitToFirst(20);
    return userRef.once('value');     
}

В компоненте я пытаюсь визуализировать данные в FlatList, но он ничего не рендерит, я не знаю, что я делаю неправильно:

componentDidMount(){
   this.props.getPeople();
}
_renderItem = ({ item }) => (

    <View style={{flex: 1}}>
        <Text>{item}</Text>
    </View>
);

render(){
    const { inProgress, people, error } = this.props.peopleData;
    return (
        <FlatList
            data={people}
            renderItem={this._renderItem} 
        />
    );
}

когда консольный журналpeople это результат:{cpycwkz7exVBzmhaLEtHjMW66wn1: {…}, UbIITfUANmb63cYE2x7dZRZ0pfK2: {…}}

Ответы на вопрос(3)

который вы можете преобразовать с помощью firebase:

Object.entries(peopleFromFirebase).map(item => ({...item[1], key: item[0]}));

Так что JSON из Firebase, как это:

{
  cpycwkz7exVBzmhaLEtHjMW66wn1: {
    name: 'wade owen watts', 
    phone:'+447...'
  }, 
  UbIITfUANmb63cYE2x7dZRZ0pfK2: {
    name: 'Helen Harris', 
    phone:'+448...'
  }
}

будет выглядеть так:

[
  {
    key: 'cpycwkz7exVBzmhaLEtHjMW66wn1',
    name: 'wade owen watts', 
    phone:'+447...'
  }, 
  {
    key:'UbIITfUANmb63cYE2x7dZRZ0pfK2',
    name: 'Helen Harris', 
    phone:'+448...'
  }
]

за исключением массива объектов, но Firebase возвращает данные в виде карты, как пара {ключ: значение}, так что вы должны преобразовать эту карту в массив, вы можете установить модуль lodash и использовать функцию _.values ​​() для этого

 Yasir30 окт. 2017 г., 08:12
куда мне положить этот кусок кода? вgetData() функция? Или я делаю это в редукторе?
Решение Вопроса

FlatList компонент ожидает егоdata поддержать быть массивом. Вы передаете это как Объект. Вы можете изменить его на массив объектов. Тогда тоже в вашем_renderItem методitem будет объектом, и он не может быть визуализирован сразу в<Text>Вы должны извлечь текстовое значение из объекта элемента и затем отобразить его как:<Text>SOME_TEXT_NOT_AN_OBJECT</Text>

Вы можете преобразовать ваш объект people в массив и передать его<FlatList нравится:

render(){
    const { inProgress, people, error } = this.props.peopleData;
    let ArrayOfPeopleObject = Object.values(people)
    return (
        <FlatList
            data={ArrayOfPeopleObject}
            renderItem={this._renderItem} 
        />
    );
}

Теперь каждыйitem в_renderItem Метод будет объектом, и вы можете извлечь значение из любого ключа и отобразить его в<Text>.

Ваш ответ на вопрос