export default function CreatePage() { let [state,setState]=useState({}) let flag=true useEffect(()=>{ if(flag){ axios.get('http://192.168.43.151:3001/data').then((res)=> { console.log(res.data) setState({...res.data}) flag=false console.log(false) } ).catch((err)=>{console.log(err)}).finally(()=>{flag=false}) } }) return ( <View > <Text>hh</Text> <Icon name="heart" size={24} color="#4F8EF7" /> <Text>first page</Text> <Text>{state.name}</Text> </View> )
}
after the code is executed ,the terminal continues showing :
{"age": 25, "name": "connor", "password": "123456"} LOG false LOG {"age": 25, "name": "connor", "password": "123456"} LOG false LOG {"age": 25, "name": "connor", "password": "123456"} LOG false
i have confusion about this ,useEffect function should be rendered once .However ,it seems continuing to be redered .
Advertisement
Answer
You did not add a dependency array to the useEffect function. Therefore, it is bound to be an infinite reRendering.
And react does not recommend let
. Use the status value.
You can add a dependency array
const [state,setState] = useState({}); const [flag,setFlag] = useState(true); useEffect(()=>{ if(flag){ axios.get('http://192.168.43.151:3001/data').then((res)=> { console.log(res.data) setState({...res.data}) setFlag(false) console.log(false) } ).catch((err)=>{console.log(err)}).finally(()=>{flag=false}) } },[]) if(flag) { return <LoadingElem /> } ...