Реактивные данные сортировки ListView - PullRequest
0 голосов
/ 06 сентября 2018

кто-нибудь знает, как сортировать данные в собственном списке реагирования?

Ниже приведены данные, которые я извлекаю из базы данных / базы данных, и я хотел бы отсортировать их по баллам, а затем отобразить что-то вроде таблицы лидеров.

(3) [{…}, {…}, {…}]
 0:
  data:{nome: "username", score: 100, status: "in"}
__proto__:Object
 1:{data: {…}}
 2:{data: {…}}
 length:3
__proto__:Array(0)

Пожалуйста, смотрите код ниже:

class Leaderboards extends Component {

  componentWillMount() {
    this.props.leaderboards();
    this.criaFonteDeDados(this.props.leader);
  }

  componentWillReceiveProps(nextProps) {
    this.criaFonteDeDados(nextProps.leader);
  }

  criaFonteDeDados(leader) {
    const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
    this.fonteDeDados = ds.cloneWithRows(leader);
  }

  renderRow(leader) {
    return (
      <View>
        <Text>{leader.data.score}</Text>
        <Text>{leader.data.nome}</Text>
      </View>
    );
  }

  render() {
    return (
      <ListView
        enableEmptySections
        dataSource={this.fonteDeDados}
        renderRow={this.renderRow}
      />
    );
  }
}

const mapStateToProps = state => {
  const leader = _.map(state.LeaderboardsReducer, (val) => {
    return { ...val };
  });
  return { leader };
};

export default connect(mapStateToProps, { leaderboards })(Leaderboards);

1 Ответ

0 голосов
/ 06 сентября 2018

После извлечения ваших данных из firebase вы должны отсортировать массив. Для сортировки по баллам у вас должно быть что-то вроде

data.sort(function(a,b) {
   return (a.score > b.score) ? 1 : ((b.score > a.score) ? -1 : 0);
});

После этого не забудьте установить состояние компонента с помощью отсортированного массива.

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