Как вернуть компонент с данными?

Я уже делал то же самое, используя подзапросы. Поэтому, если ваша оригинальная таблица была вызвана StoreCountsByWeek, и у вас была отдельная таблица, в которой перечислены идентификаторы магазина, то она будет выглядеть так:

SELECT StoreID, 
    Week1=(SELECT ISNULL(SUM(xCount),0) FROM StoreCountsByWeek WHERE StoreCountsByWeek.StoreID=Store.StoreID AND Week=1),
    Week2=(SELECT ISNULL(SUM(xCount),0) FROM StoreCountsByWeek WHERE StoreCountsByWeek.StoreID=Store.StoreID AND Week=2),
    Week3=(SELECT ISNULL(SUM(xCount),0) FROM StoreCountsByWeek WHERE StoreCountsByWeek.StoreID=Store.StoreID AND Week=3)
FROM Store
ORDER BY StoreID

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

Мои анонимные результаты заключаются в том, что выполнение этого запроса по нескольким тысячам строк завершено менее чем за одну секунду, и я на самом деле имеет 7 подзапросов. Но, как отмечается в комментариях, сделать это так дорого, поэтому будьте осторожны при использовании этого метода, если вы ожидаете, что он будет работать на больших объемах данных.

0
задан Diego Cardona 16 January 2019 в 22:08
поделиться

2 ответа

Вы не должны возвращать компоненты из методов жизненного цикла. Установите данные API, выбранные в локальном состоянии, а затем передайте их компоненту в функции рендеринга.

componentDidMount() {
  const db = firebase.firestore();

  db.collection("posts")
    ...
    .then(querySnapshot => {
      this.setState({ data: querySnapshot })
    })
    ...
  }

  render() {
    return <MyNotes data={this.state.data} />;
  }
0
ответ дан varoons 16 January 2019 в 22:08
поделиться
class HandleMyNotes extends Component {
  state = {
    isLoading: false,
    err: null,
    posts: [],
  };

  componentDidMount() {
    const db = firebase.firestore();

    this.setState({
     isLoading: true,
    });

    db.collection("posts")
      .where("author.email", "==", this.props.authorEmail)
      .get()
      .then(querySnapshot => {
        this.setState({
         isLoading: false,
         posts: querySnapshot.map(note => note.data()),
        });
      })
      .catch(err => {
        this.setState({
         isLoading: false,
         err,
        });
      });
  }

  render() {
    const {
      isLoading,
      err,
      notes,
    } = this.state;
    // if loading or error you can handle here.
    return (
      <div>
        {notes.map(note => <Note key={note.id} data={note}/>)}
      </div>
    );
  }
}

0
ответ дан Mike Zinn 16 January 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: