亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不確定跨域錯誤的來源

不確定跨域錯誤的來源

慕無忌1623718 2022-11-11 14:03:28
由于某種原因,添加該行{jokes.map(joke => joke.setup)}(請參閱下面的完整組件)會引發錯誤(如下所示)。我覺得這與 useState 掛鉤有關,但我不確定解決方法。任何幫助,將不勝感激!組件代碼如下:import React, {useState, useEffect} from 'react'function JokeFinder() {    //2 states: input query, jokes shown    const [query, setQuery] = useState('')    const [jokes, setJokes] = useState([])        const getJokes = async (event) => {                event.preventDefault();        let URL;                try{            if(query === "one" || query === "1") {                URL = `https://official-joke-api.appspot.com/jokes/random`            } else if (query === "ten" || query === "10") {                URL = 'https://official-joke-api.appspot.com/jokes/ten'            }            const result = await fetch(URL);            const data = await result.json();            setJokes(data);        } catch(err) {            console.log(err);        }    }        const changeHandler = (event) => {        setQuery(event.target.value)    }        return(        <div>            <form className="form" onSubmit={getJokes}>                <label className="label" htmlFor="query">It's never a bad time to have a laugh! How many jokes would you like to enjoy? One or ten? Type in the number below.</label>                <input                     className="input"                    type="text"                    name="query"                    placeholder="Enter number of Jokes Desired"                    value={query}                    onChange={changeHandler}                />                <button className="button" type="submit">Search!</button>            </form>            <div className="card-list">                {jokes.map(joke => joke.setup)}            </div>        </div>    )}export default JokeFinder
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

您錯誤地使用了地圖功能。您應該將函數傳遞給映射。


const { useState } = React;


const JokeFinder = () => {

  const [query, setQuery] = useState("");

  const [jokes, setJokes] = useState([]);


  const getJokes = event => {

    event.preventDefault();

    let URL;


    try {

      if (query === "one" || query === "1") {

        URL = `https://official-joke-api.appspot.com/jokes/random`;

      } else if (query === "ten" || query === "10") {

        URL = "https://official-joke-api.appspot.com/jokes/ten";

      }

      fetch(URL).then((result) => {

         result.json().then(data => setJokes(data));

      });

    } catch (err) {

      console.log(err);

    }

  };


  const changeHandler = event => {

    setQuery(event.target.value);

  };


  return (

    <div>

      <form className="form" onSubmit={getJokes}>

        <label className="label" htmlFor="query">

          It's never a bad time to have a laugh! How many jokes would you like

          to enjoy? One or ten? Type in the number below.

        </label>

        <div className="input-container">

           <input

             className="input"

             type="text"

             name="query"

             placeholder="Enter number of Jokes Desired (only one or ten)"

             value={query}

             onChange={changeHandler}

           />

           <button className="button" type="submit">

             Search!

           </button>

        </div>

      </form>

      <div className="card-list">

        {jokes.length ? (

          jokes.map((joke, index) => (

            <div key={index}>

              <p className="setup" >{joke.setup}</p>

              <p className="punchline">{joke.punchline}</p>

            </div>

          ))

        ) : (

          <div>

            <p className="setup">{jokes.setup}</p>

            <p className="punchline">{jokes.punchline}</p>

          </div>

        )}

      </div>

    </div>

  );

};



class App extends React.Component {

  render() {

    return (

      <JokeFinder />

    );

  }

}


ReactDOM.render(<App />, document.getElementById('root'));

.input-container {

  margin-top: 10px;

}

.input-container input {

  margin-right: 10px;

  min-width: 240px;

}

.setup {

  font-weight: 700;

}

.punchline {

  padding-left: 10px;

}

<html>


<body>

  <div id="root"></div>

  <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>

  <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>


</body>


</html>

你可以在這里找到工作示例



查看完整回答
反對 回復 2022-11-11
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號