多次执行代码
来源:4-5 【副作用钩子】使用useEffect异步获取数据

慕慕4402846
2022-08-03
import React, { useEffect, useState } from 'react';
import logo from './assets/images/logo.svg';
import robots from './mockdata/robot.json';
import Robot from './components/robot';
import styles from './App.module.css'
import ShoppingCar from './components/ShoppingCar';
import { render } from '@testing-library/react';
interface Props{}
interface State{
robotGallery:any[];
}
const App:React.FC =(props)=>{
const [ count,setCount ] = useState<number>(0);
const [robotGallery,setRobotGallery] = useState<any>([])
useEffect(()=>{
document.title=`点击${count}次`
},[count])
console.log("123")
useEffect(()=>{
fetch("https://jsonplaceholder.typicode.com/users")
.then(res=>res.json())
.then(data=>setRobotGallery(data))
},[])
return (
<div className={styles.app}>
<div className={styles.appHeader}>
<img src={logo} className={styles.appLogo} alt="" />
<h1>罗伯特机器人炫酷吊炸天online购机平台名字要长才吊</h1>
</div>
<button onClick={()=>{
setCount(count+1)
}
}>
click
</button>
<span>count:{count}</span>
<ShoppingCar></ShoppingCar>
<div className={styles.robotList}>
{robotGallery.map((r:any)=>{
return <Robot id={r.id} name={r.name} email={r.email}></Robot>
})}
</div>
</div>
)
}
export default App;
老师您好:我在console.log(“123”)这里打断点,为什么执行了6次呢 ,接口也是在network中显示发起了2次
写回答
1回答
-
慕粉3726649
2022-08-04
我执行了你的代码,确实有6次。
但这其中要看的其实是第一次、第三次和第五次,其他都是react工具跑出来的结果(我的理解)。
至于这真正的三次,一次是因为react strictmode会多执行一次,可以把index.tsx里面strictmode去掉。参考:https://juejin.cn/post/6844904084768587790
另一次是因为setRobotGallery这个副作用的state赋值,每次setState都会渲染一次组件。
10
相似问题