как зациклить несколько массивов в реагировать родной - PullRequest
1 голос
/ 10 июля 2019

Я на самом деле хочу перебрать коллекцию в firestore, которая содержит несколько документов, и я хочу вернуть документ, содержащий идентификатор поля, равный моему uid.

это данные в firestore:

const { user } = this.props ;
console.log("getting user data: ", user )

result on console

это мой код:

render() {
   const auth = this.props.auth;
   console.log("getting user id: ", auth.uid);

   const userData = user.map((item)=>(
      (item.uid) = (auth.uid)
        ? <Text color="white" size={28} style={{ paddingBottom: 8 }}>
               { item.displayName } </Text>
        : <Text color="white" size={28} style={{ paddingBottom: 8 }}> Error 
          </Text>
      )
    );
return (

              <Block style={styles.profileTexts}>
                  {userData}
              </Block>
   )
}
const mapStateToProps = ( state ) => {
  console.log("state firebase",state);
  return{
    auth: state.firebase.auth,
    user: state.firestore.ordered.users,
  }
}
const mapDispatchToProps = (dispatch) => {
  return {
    signOut: () => dispatch(signOut()),
  }
}

export default compose(
   connect(mapStateToProps, mapDispatchToProps),
   firestoreConnect([
       { collection: 'users'},
   ]))(Profile)

Но я получил эту ошибку: "Ошибка типа: undefined не является объектом (оценивая 'o.map ') "

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Вы используете user в методе render (), но я не вижу, где вы их взяли?Я думаю, что это может решить проблему.

render() {
   const auth = this.props.auth;
   console.log("getting user id: ", auth.uid);


   const user = this.props.user // <=== add this line
   const userData = user.map((item)=>(
   ...
0 голосов
/ 10 июля 2019

внутри вашей карты вы используете оператор присваивания вместо оператора сравнения.

если вы просто хотите вернуть элемент, который совпадает с auth.uid, используйте вместо него фильтр

Создать функцию, которая возвращает item.uid === auth.uid

  userFn = () => {
      const {user} = this.props;
      const authUser = user.filter(item => {
          return item.uid === auth.uid
      })
     if (authUser.length>1){
         return <Text>{authUser[0].displayName}</Text>
     }
     else return <Text>Error</Text>
  }

затем внутри оператора возврата

  return (
      <View style={{flex:1,justifyContent:'center'}}>
          {this.userFn()}
      </View>
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...