2017-11-15 2 views
1

나는 다음 코드를 사용하여 중포 기지를 쿼리 반작용 응용 프로그램을 가지고있다. ReactJS 및 중포 기지 주문 데이터

database structure

은 내가 내 이름은 각 사용자에 대해 나타나는 이유입니다, 함께 테스트하고있어 3 개 다른 Google 계정을 가지고있다.

내 반응 앱에 각 사용자를 표시하려면 totalSubs 순으로 내림차순으로 표시하고 싶습니다. 상단에 가장 높은 숫자는 totalSubs입니다.

다른 게시물에서 나는 .orderByChild('totalSubs');이 데이터를 주문하고 허용한다고 생각했지만 작동하지 않습니다. 아무도 내가 누락 된 걸 말해 줄 수 있니?

답변

0

귀하의 질의는 정확하지만, 귀하는 반환 된 DataSnapshot에서 데이터를 추출하는 데 사용하는 방법을 조정해야합니다. working with lists of data documentation에서

:

당신이 다음 루프를 통해 개별 아동에 액세스 할 수있는 단일 스냅 샷으로 데이터의 전체 목록을 반환 할 데이터의 목록에 value 관찰자 연결.

쿼리에 대해 일치하는 항목이 하나만있는 경우에도 스냅 숏은 여전히 ​​목록입니다. 그것은 단지 하나의 항목을 포함합니다. 항목을 액세스하려면, 당신은 결과를 반복 할 필요

ref.once('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
    var childKey = childSnapshot.key; 
    var childData = childSnapshot.val(); 
    // ... 
    }); 
}); 

따라서, 귀하의 예제 코드와 함께, 당신은 forEach를 사용하여 반환 된 아이들을 통해 변화의 몇 가지를 확인하고 반복해야합니다 :

const usersRef = firebase.database().ref('users').orderByChild('totalSubs'); 

usersRef.on('value', (snapshot) => { 
    let newState = []; 

    snapshot.forEach(function(childSnapshot) { 
     newState.push({ 
      id: childSnapshot.key, 
      displayName: childSnapshot.val().displayName, 
      totalSubs: childSnapshot.val().totalSubs, 
      userImg: childSnapshot.val().userImg 
     }); 
    }); 

    this.setState({ 
     users: newState 
    }); 
}); 
+1

완벽한 감사합니다. 내가 변경 한 유일한 생각은 내가 뒤집은 결과입니다 : {this.state.users.reverse(). map ((user) => {... 시간을내어 도와 주셔서 감사합니다! –