Javascript 父React组件在使用React钩子级中的更改状态时不重新呈现;

Javascript 父React组件在使用React钩子级中的更改状态时不重新呈现;,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有一个父组件“HOME”和用于创建新池的表单。我正在将池数组和setState函数发送到子组件中。如果我不刷新页面,父组件将不会呈现新池 “主页” 导出默认函数Home(){ const[user,setUser]=useState({}); const[lists,setLists]=useState([]); useffect(()=>{ 如果(!user.id){ 异步函数fetchUser(){ 等待axios.get(“/api/user/”) 。然后(异步数据=>{ !!data.

我有一个父组件“HOME”和用于创建新池的表单。我正在将池数组和setState函数发送到子组件中。如果我不刷新页面,父组件将不会呈现新池

“主页”

导出默认函数Home(){
const[user,setUser]=useState({});
const[lists,setLists]=useState([]);
useffect(()=>{
如果(!user.id){
异步函数fetchUser(){
等待axios.get(“/api/user/”)
。然后(异步数据=>{
!!data.data?(setUser(data.data)、setlist(data.data.pools)):wait createUser()
}
);
}
异步函数createUser(){
等待axios.post(“/api/user/”)
.then(data=>{setUser(data.data)});
}
fetchUser();
}
}, [])
if(用户名){
返回(
欢迎来到MyShopper!
setLists}poolsArr={lists}/>
{lists.length>0&&
lists.map(池=>(
))
}
)
}否则{
返回(
加载

) } }
“池”(子项)

从“axios”导入axios;
导出默认函数NewPool(道具){
const[name,setName]=useState(null);
const pools=props.poolsArr;
const setPool=props.setter;
异步函数onClickHandler(事件){
event.preventDefault();
等待axios.post('/api/pool/',{poolName:name})
.then(pool=>{()=>setPool([…pool,pool.data]));
}
函数onChangeEv(事件){
setName(event.target.value);
}
返回(
)
}
我知道如何使用Redux修复它。在这里我想更好地理解。这是一个绑定问题吗

如果有任何建议,我将不胜感激!
谢谢大家!

这里您将把集合列表作为函数引用传递 所以setter是一个返回setLists引用的函数

<NewPool setter={() => setLists} poolsArr={lists} />
// using this you'd need to call setter()() to call setLists()
setLists}poolsArr={lists}/>
//使用这个函数,您需要调用setter()()来调用setlist()
您可以像这样直接传递函数

<NewPool setter={setLists} poolsArr={lists} />


这将解决您的问题

在这里,您将设置列表作为函数引用传递 所以setter是一个返回setLists引用的函数

<NewPool setter={() => setLists} poolsArr={lists} />
// using this you'd need to call setter()() to call setLists()
setLists}poolsArr={lists}/>
//使用这个函数,您需要调用setter()()来调用setlist()
您可以像这样直接传递函数

<NewPool setter={setLists} poolsArr={lists} />


这将解决您的问题

太棒了,它正在工作,谢谢!请您解释一下,为什么它不能通过匿名函数工作,以及我们必须在哪里通过anon func运行它?非常感谢。您可以添加setter={()=>setLists()}来定义函数,因为您发送的函数将返回setLists返回的值,之前您只是发送函数引用,而不是返回值..太棒了,它正在工作,谢谢!请您解释一下,为什么它不能通过匿名函数工作,以及我们必须在哪里通过anon func运行它?非常感谢。您可以添加setter={()=>setLists()}来定义函数,因为您发送的函数将返回setLists返回的值,而之前您只是发送函数引用,而不是它的返回值。。