Прежде всего, сохраните массив котировок, который вы извлекли в состояние, чтобы вам не нужно было извлекать его снова, когда вы хотите отобразить другую цитату.
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>