【发布时间】:2020-04-23 18:20:46
【问题描述】:
下面是组件文件SinglePostBySearch.js
import React, { useState } from 'react'
import Post from './Post'
const axios = require('axios')
const getElt=({loading},{isThereQuery},{posts})=>{
console.log(posts)
if(!loading && isThereQuery)
{
return(
<Post post={posts} id={posts.id} />
)
}
if(loading)
{
return <div>Loading</div>
}
if(!(loading && posts))
{
return <div>No post from the user</div>
}
}
function SinglePostBySearch(props) {
const [posts, setPosts] = useState({})
const [isThereQuery,setIsThereQuery]=useState(false)
const [loading,setIsLoading]=useState(false)
const fetchPost = (event) => {
const postId = event.target.value
if (postId) {
setIsThereQuery(false)
setIsLoading(true)
axios.get(`https://jsonplaceholder.typicode.com/posts/${postId}`).then(res => {
setPosts(res.data)
setIsThereQuery(true)
setIsLoading(false)
}).catch(err => {
console.log(err)
setIsLoading(false)
setPosts({})
})
}
else{
setPosts({})
setIsThereQuery(false)
}
}
return (
<div>
Hello {props.username}, enter a <strong>userId</strong> below
<input type="text" onChange={fetchPost} />
{getElt({loading},{isThereQuery},{posts})}
</div>
)
}
export default SinglePostBySearch
问题/问题:在功能组件的返回中,在第三行中,我正在调用另一个函数 getElt。它似乎被调用了大约 4 或 5 次,这是我从 getElt 函数的第一行中插入的 console.log 计算出来的。我想知道为什么它被调用了这么多次,而它应该只调用一次。
我想指出的是,函数 getElt
返回的子组件 Post 中没有任何控制台日志语句【问题讨论】:
-
getElt将在SinglePostBySearch被重新渲染时被调用 - 每当它的道具发生变化时。这种情况经常发生并不少见,但我们无法确定,因为您没有显示任何渲染它的父组件。
标签: javascript reactjs react-hooks