2016-10-28 5 views
0

Я новичок в firebase и React. Я успешно получены пользовательские данные из firebase со следующим кодом:Настройка состояния нескольких переменных сразу из базы

firebase.auth().onAuthStateChanged(firebaseUser => { 
    if(firebaseUser) { 
    const dbRoot = firebase.database().ref().child('users').child(firebaseUser.uid); 
    const name = dbRoot.child('name'); 
    const bio = dbRoot.child('bio'); 

    name.on('value', snap => { 
     this.setState({ 
     name: snap.val() 
     }); 
    }); 

    bio.on('value', snap => { 
     this.setState({ 
     bio: snap.val() 
     }); 
    }); 

    } else { 
    console.log("not logged in"); 
    } 
}); 

}

Это работает, но я ищу лучший способ SetState всех значений (имя, био, и т.д.), не создавая несколько блоков setState, подобных сверху, и я еще не обнаружил его. У меня есть много данных, чтобы получить от пользователя, так что код станет более громоздким. Я хотел бы сделать что-то вроде:

this.setState({ 
    name: snap.name.val(), 
    bio: snap.bio.val(), 
    email: snap.email.val() 
}); 

Или что-то еще самое лучшее. Может ли кто-нибудь указать мне в правильном направлении? Заранее спасибо.

ответ

1

Вы не получите детский «имя» и «био» отдельно от DBROOT:

firebase.auth().onAuthStateChanged(firebaseUser => { 
    if(firebaseUser) { 
    const dbRoot = firebase.database().ref().child('users').child(firebaseUser.uid); 

    dbRoot.on('value', snap => { 
     const user = snap.val(); // snap is a child of 'users' 
     this.setState({ 
     name: user.name, 
     bio: user.bio, 
     email: user.email 
     }); 
    }); 

    } else { 
    console.log("not logged in"); 
    } 
}); 
+0

Да, идеально, именно то, что я искал, чтобы сделать, и это работает. Спасибо! –

Смежные вопросы