似乎无法弄清楚为什么代码会进入无限循环
Cant seem to figure out why the code is going into an infinite loop
考虑以下代码:
import React from 'react';
import Card from './components/Card';
import './App.css';
import Buttongrp from './components/Buttongrp';
import { useEffect, useState } from 'react';
function App() {
useEffect(() => {
getData();
}, [])
const getData = () => {
fetch('https://reqres.in/api/users')
.then(response => response.json())
.then(data => { setDataArray(data) })
}
const getSingleData = () => {
fetch(`https://reqres.in/api/users/${Math.floor(Math.random() * 10) + 1}`)
.then(response => response.json())
.then(datajson => { setEmail(datajson.data.email); setFirstName(datajson.data.first_name); setLastName(datajson.data.last_name) })
}
const [cardImgUrl, setCardImgUrl] = useState("https://i.pinimg.com/564x/a0/d5/c9/a0d5c9af2eee2970a6eea591fade8271.jpg")
const [firstName, setFirstName] = useState("")
const [lastName, setLastName] = useState("")
const [email, setEmail] = useState("")
const [dataArray, setDataArray] = useState({})
return (
<>
<div className="container d-flex my-3">
<div className="display-4 mx-auto d-inline">CV Screener</div>
</div>
<div className="container-fluid my-3">
<Card cardImgUrl={cardImgUrl} firstName={firstName} lastName={lastName} email={email} />
</div>
<div className="container d-flex justify-content-center flex-md-row flex-lg-row flex-sm-column flex-xs-column" >
<div className="d-inline" >
{
dataArray?.data && dataArray.data.map((e) => {
return <Buttongrp id={e.id} getSingleData={getSingleData} />
})
}
</div>
</div>
</>
);
}
export default App;
还有组件:
import React from 'react'
import { FaUserAlt } from 'react-icons/fa';
function Buttongrp(props) {
return (
<>
<button type="button" className="btn btn-light btn-lg mx-2 my-2" onClick={props.getSingleData()} >
<FaUserAlt /> Fetched User {props.id}
</button>
</>
)
}
export default Buttongrp
函数'getSingleData'被无限调用,直到我的电脑内存不足。我已经将它设置为仅在单击按钮时被调用,但即使我一次都没有单击按钮,它仍然被调用。我无法弄清楚为什么会发生这种行为
试试这个:
onClick={() => props.getSingleData()}
考虑以下代码:
import React from 'react';
import Card from './components/Card';
import './App.css';
import Buttongrp from './components/Buttongrp';
import { useEffect, useState } from 'react';
function App() {
useEffect(() => {
getData();
}, [])
const getData = () => {
fetch('https://reqres.in/api/users')
.then(response => response.json())
.then(data => { setDataArray(data) })
}
const getSingleData = () => {
fetch(`https://reqres.in/api/users/${Math.floor(Math.random() * 10) + 1}`)
.then(response => response.json())
.then(datajson => { setEmail(datajson.data.email); setFirstName(datajson.data.first_name); setLastName(datajson.data.last_name) })
}
const [cardImgUrl, setCardImgUrl] = useState("https://i.pinimg.com/564x/a0/d5/c9/a0d5c9af2eee2970a6eea591fade8271.jpg")
const [firstName, setFirstName] = useState("")
const [lastName, setLastName] = useState("")
const [email, setEmail] = useState("")
const [dataArray, setDataArray] = useState({})
return (
<>
<div className="container d-flex my-3">
<div className="display-4 mx-auto d-inline">CV Screener</div>
</div>
<div className="container-fluid my-3">
<Card cardImgUrl={cardImgUrl} firstName={firstName} lastName={lastName} email={email} />
</div>
<div className="container d-flex justify-content-center flex-md-row flex-lg-row flex-sm-column flex-xs-column" >
<div className="d-inline" >
{
dataArray?.data && dataArray.data.map((e) => {
return <Buttongrp id={e.id} getSingleData={getSingleData} />
})
}
</div>
</div>
</>
);
}
export default App;
还有组件:
import React from 'react'
import { FaUserAlt } from 'react-icons/fa';
function Buttongrp(props) {
return (
<>
<button type="button" className="btn btn-light btn-lg mx-2 my-2" onClick={props.getSingleData()} >
<FaUserAlt /> Fetched User {props.id}
</button>
</>
)
}
export default Buttongrp
函数'getSingleData'被无限调用,直到我的电脑内存不足。我已经将它设置为仅在单击按钮时被调用,但即使我一次都没有单击按钮,它仍然被调用。我无法弄清楚为什么会发生这种行为
试试这个:
onClick={() => props.getSingleData()}