Как я могу обновить запрос на выборку в реакции - PullRequest
0 голосов
/ 07 июня 2019

Я загружаю API котировок.Здесь я хочу обновить цитаты случайным образом, но я хочу обновить цитаты по нажатию кнопки.Я понятия не имею, как это сделать.Может кто-нибудь помочь мне сделать это?

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

Это мой код

import React from "react";    
import "./styles.css";    
class Box extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      quote: "",
      author: ""
    };
  }    
  componentDidMount() {
    this.fetchData();
  }
  fetchData = () => {
    fetch(
      "https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json"
    )
      .then(result => {
        return result.json();
      })
      .then(data => {
        const ran = Math.floor(Math.random() * data.quotes.length);       
        console.log(data.quotes[ran].quote);
        console.log(data.quotes[ran].author);
        this.setState({
          quote: data.quotes[ran].quote,
          author: data.quotes[ran].author
        });
      });
  };

  render() {
    return (
      <div id="quote-box" className="container">
        <div className="box-container">
          <div className="text-center">
            <h1 id="text">{this.state.quote}</h1>
          </div>
          <div className="float-right">
            <p id="author">
              <span>- </span>
              {this.state.author}
            </p>
          </div>
        </div>
        <div className="box-item">
          <div className="row">
            <div className="col-sm-6">Twitter</div>
            <div className="col-sm-6">
              <button>next quote</button>  <--- Here i want this button to update quotes on screen.
            </div>
          </div>
        </div>
      </div>
    );
  }
}

export default Box;

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Прежде всего, сохраните массив котировок, который вы извлекли в состояние, чтобы вам не нужно было извлекать его снова, когда вы хотите отобразить другую цитату.

this.state = {
  quoteArray: [],  <----- This one
  quote: "",
  author: ""
};

Затем создайте отдельную функцию, котораяполучит случайную кавычку из этого quoteArray

pickRandomQuote = () => {
   const ran = Math.floor(Math.random() * data.quotes.length);      
   this.setState({
     quote: this.state.quoteArray[ran].quote,
     author: this.state.quoteArray[ran].author
   });
}

В вашей функции извлечения сохраните массив, который вы выбрали для состояния, а затем вызовите pickRandomQuote после

fetchData = () => {
    fetch(
"https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json"
    )
      .then(result => {
        return result.json();
      })
      .then(data => {
        this.setState({
          quoteArray: data
        });
        this.pickRandomQuote();
      });
  };

Затем для генерации новогослучайная цитата, просто поместите это к своей кнопке

<button onClick={() => this.pickRandomQuote()}>next quote</button>
1 голос
/ 07 июня 2019

рендер: <button onClick={this.fetchData}>next quote</button>

конструктор:

constructor(props) {
  super(props);
  this.state = {
    quote: "",
    author: ""
  };
  this.fetchData = this.fetchData.bind(this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...