Как я могу получить новый массив на клик?

Вы можете присоединиться к двум коллекциям в Монго, используя поиск, который предлагается в версии 3.2. В вашем случае запрос будет

db.comments.aggregate({
    $lookup:{
        from:"users",
        localField:"uid",
        foreignField:"uid",
        as:"users_comments"
    }
})

, или вы также можете присоединиться к пользователям, тогда будет небольшое изменение, как указано ниже.

db.users.aggregate({
    $lookup:{
        from:"comments",
        localField:"uid",
        foreignField:"uid",
        as:"users_comments"
    }
})

Он будет работать так же, как левое и правое соединение в SQL.

1
задан Nischal 2 April 2019 в 23:24
поделиться

2 ответа

Вы можете переместить выборку в отдельный метод, который вы вызываете как в componentDidMount, так и в nextPic.

Пример

class App extends React.Component {
  state = {
    meme: {},
    num: 6
  };

  componentDidMount() {
    this.fetchMeme();
  }

  fetchMeme = () => {
    const url = `http://meme.com/${this.state.num}`;

    fetch(url)
      .then(resp => resp.json())
      .then(data => {
        this.setState({
          meme: data
        });
      });
  };

  nextPic = () => {
    this.setState({
      num: this.state.num >= this.state.meme.totalMemes ? 1 : this.state.num + 1
    }, this.fetchMeme);
  };

  render() {
    return (
      <div>
        <h1>{this.state.meme.title}</h1>
        <img key={this.state.num} src={this.state.meme.encodedurl} />
        <button onClick={this.nextPic}>Next</button>
      </div>
    );
  }
}
0
ответ дан Tholle 2 April 2019 в 23:24
поделиться

Сделайте вызов API api функцией. попробуйте это:

constructor() {
  super();

  this.state = {
    meme: {},
    num: 6
  };

}

componentDidMount() {
  fetchFromAPI(this.state.num);
}

let fetchFromAPI = (num)=>{

this.APIURL = `http://meme.com/${num}`;

   fetch(this.APIURL)
    .then(resp => resp.json())
    .then(data => {
      console.log(data);
      if (data) {
        this.setState({
          meme: data
        });
      }

      console.log(this.state.meme);
    });

}

nextPic = () => {
  if (this.state.num > this.state.meme.totalMemes) {
    this.setState({
      num: 1
    });
  } else {
    this.setState({
      num: this.state.num + 1
    });
    console.log(this.state.num);
  }
   fetchFromAPI(this.state.num);
};

render() {
  return (
    <div>
      <h1>{this.state.meme.title}</h1>
      <img key={this.state.num} src={this.state.meme.encodedurl} />
      <button onClick={this.nextPic}>Next</button>
    </div>
  );
}

Я не проверял это, но похоже, что это будет работать.

0
ответ дан CertainPerformance 2 April 2019 в 23:24
поделиться
Другие вопросы по тегам:

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