繁体   English   中英

单击按钮显示数组中的随机字符串 [React]

[英]Display a random string from an array on the click of a button [React]

我正在尝试构建一个显示随机问题的简单应用程序。 我可以在装载和页面刷新时成功显示数组中的随机字符串。

我想显示一个按钮的不同随机问题“onClick”而不是刷新页面?

到目前为止的代码如下:

export const QuestionContainer = () => {
  const [response, setResponse] = useState({});

  useEffect(() => {
    fetchData().then(res => setResponse(res));
  }, []);

  const { records = [] } = response;

  const questions = records.map(record => record.fields.question);

  console.table(questions);

 // const randomNum = arr => {
 //   return Math.floor(Math.random() * arr.length);
 //  };

  return (
    <div className='questions-container'>
      <h1>{questions[0]}?</h1>
      <button onClick={() => console.log('more')}>More</button>
    </div>
  );
};

const questions是一个字符串数组示例 - ['hello', 'world', 'noob question']

你非常接近! 只需使用 onClick 设置正在显示的索引,您就大功告成了! 这应该有效:

const randomIndex = (arr) => { // returns a random int value to use as an index
    return Math.floor(Math.random() * arr.length)
}
export const QuestionContainer = () => {
  const [response, setResponse] = useState({});
  const [index, setIndex] = useState(0) // 0 initially, as you had in your example

  useEffect(() => {
    fetchData().then(res => setResponse(res));
  }, []);

  const { records = [] } = response;

  const questions = records.map(record => record.fields.question);

  console.table(questions);

  return (
    <div className='questions-container'>
      <h1>{questions[index]}?</h1>
      <button onClick={_ => setIndex(randomIndex(questions)}>More</button>
    </div>
  );
};

如果您使用另一个带有按钮的 API 随机报价:

 
import './App.css';
import axios from 'axios';
import { useEffect, useState } from 'react';

const App = () => {
  const randomIndex = (arr) => { // returns a random int value to use as an index
    return Math.floor(Math.random() * arr.length)
  }

  const [quote, setQuote] = useState("");
  const [index, setIndex] = useState(0);

  const quoteAPI = async () => {
    let arrayOfQuotes = [];

try {
      const data = await axios.get("https://raw.githubusercontent.com/skolakoda/programming-quotes-api/master/backup/quotes.json");
      arrayOfQuotes = data.data;
      console.log(arrayOfQuotes);
      const quote = arrayOfQuotes.map((arrayOfQuote) =>
        <div key={arrayOfQuote.id}>
          <h3>{arrayOfQuote.en}</h3>
          <p>{arrayOfQuote.author}</p>

        </div>);
      console.log(quote);
      setQuote(quote);
    } catch (error) {
      console.log(error);
    }

  };

  useEffect(() => {
    quoteAPI();
  }, []);

  return (<div className="App">
    <h4>{quote[index]}</h4>
    <button onClick={_ => setIndex(randomIndex(quote))}>Get Random Quote</button>
  </div>
  );
};

export default App;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM