Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 虽然状态已更新,但不会重新呈现组件子级_Reactjs - Fatal编程技术网

Reactjs 虽然状态已更新,但不会重新呈现组件子级

Reactjs 虽然状态已更新,但不会重新呈现组件子级,reactjs,Reactjs,在这种情况下,我并没有使用reducer来更新组件的状态更改。我将道具发送到子组件,我希望每次父组件上的状态更改时都会更新道具 在母组件中,我将状态currentPage默认设置为1 const [pager, setPager] = useState({ currentPage: 1 }); const propToSend = pager.currentPage; //and make trigger change: const onClick = (e) => {

在这种情况下,我并没有使用reducer来更新组件的状态更改。我将道具发送到子组件,我希望每次父组件上的状态更改时都会更新道具

在母组件中,我将状态currentPage默认设置为1

const [pager, setPager] = useState({
    currentPage: 1
  });

const propToSend = pager.currentPage;

//and make trigger change:
const onClick = (e) => {
 setPager({...pager, currentPage:5});
}
....return...
<Pagination pageProp={propToSend} />
然后寻呼机上什么也没发生


由于子组件上的单击事件更改了状态,您能告诉我如何触发从主组件更改吗?

当props中的当前页面更新时,您需要更新分页状态。使用效果挂钩可以实现这一点。
useffect
钩子在第一次装入组件时触发一次,然后在每次更改其依赖项数组(第二个参数)中的值时再次触发。在这种情况下,当
currentPage
值从(比如)1更改为2时

const Pagination = (props) => {
  const currentPage = props.pageProp;

  const [pager, setPager] = useState({
    currentPage
  });

  useEffect(() => setPager(currentPage), [currentPage]);

  const changeActivePage(num)=> {
    setPager({..pager, currentPage:num});
  }
  .....
  const paginomal = ListPagers.map(num => (
    <li key="num" onClick={changeActivePage(num)}>{num}</li>
  ));
  return(
    <Fragment>
      {paginomal}
    </Fragment>
  )
}
然后从母亲那里

const [pager, setPager] = useState({
    currentPage: 1
  });

const propToSend = pager.currentPage;

//and make trigger change:
const onClick = (e) => {
  setPager({...pager, currentPage:5});
}
....return...
<Pagination pageProp={propToSend} onPageChange={setPager} />
const[pager,setPager]=useState({
当前页:1
});
const propToSend=pager.currentPage;
//并进行触发更改:
const onClick=(e)=>{
setPager({…寻呼机,当前页:5});
}
……返回。。。

当props的当前页面更新时,您需要更新分页状态。使用效果挂钩可以实现这一点。
useffect
钩子在第一次装入组件时触发一次,然后在每次更改其依赖项数组(第二个参数)中的值时再次触发。在这种情况下,当
currentPage
值从(比如)1更改为2时

const Pagination = (props) => {
  const currentPage = props.pageProp;

  const [pager, setPager] = useState({
    currentPage
  });

  useEffect(() => setPager(currentPage), [currentPage]);

  const changeActivePage(num)=> {
    setPager({..pager, currentPage:num});
  }
  .....
  const paginomal = ListPagers.map(num => (
    <li key="num" onClick={changeActivePage(num)}>{num}</li>
  ));
  return(
    <Fragment>
      {paginomal}
    </Fragment>
  )
}
然后从母亲那里

const [pager, setPager] = useState({
    currentPage: 1
  });

const propToSend = pager.currentPage;

//and make trigger change:
const onClick = (e) => {
  setPager({...pager, currentPage:5});
}
....return...
<Pagination pageProp={propToSend} onPageChange={setPager} />
const[pager,setPager]=useState({
当前页:1
});
const propToSend=pager.currentPage;
//并进行触发更改:
const onClick=(e)=>{
setPager({…寻呼机,当前页:5});
}
……返回。。。

如果您不想在子组件中保留一个单独的状态,那么您应该将
onClick
方法作为道具传递给子组件,然后像下面这样使用它

const paginomal = ListPagers.map(num => (
    <li key="num" onClick={() => onClick(num)}>{num}</li>
  ));
const paginomal=ListPagers.map(num=>(
onClick={()=>onClick(num)}>{num}
));
在父组件中,您可以编写如下内容

//and make trigger change:
const onClick = (num) => {
 setPager({...pager, currentPage:num});
}
....return...
<Pagination pageProp={propToSend} onClick={onClick}/>
//并进行触发器更改:
const onClick=(num)=>{
setPager({…pager,currentPage:num});
}
……返回。。。

如果您不想在子组件中保留一个单独的状态,那么您应该将
onClick
方法作为道具传递给子组件,然后像下面这样使用它

const paginomal = ListPagers.map(num => (
    <li key="num" onClick={() => onClick(num)}>{num}</li>
  ));
const paginomal=ListPagers.map(num=>(
onClick={()=>onClick(num)}>{num}
));
在父组件中,您可以编写如下内容

//and make trigger change:
const onClick = (num) => {
 setPager({...pager, currentPage:num});
}
....return...
<Pagination pageProp={propToSend} onClick={onClick}/>
//并进行触发器更改:
const onClick=(num)=>{
setPager({…pager,currentPage:num});
}
……返回。。。

谢谢您的回答。你能解释一下你的使用效果吗?@HaiTien更新了答案,对效果做了更多的解释。我认为你的第二个解决方案很容易处理。我正在试着,非常感谢你的回答。我学习了发送道具的新方法,并对应用程序的状态进行了多次更改。太棒了。我认为你的答案是最好的。非常感谢你。我从你那里知道了新方法,而不是打电话给减速机。谢谢你的回答。你能解释一下你的使用效果吗?@HaiTien更新了答案,对效果做了更多的解释。我认为你的第二个解决方案很容易处理。我正在试着,非常感谢你的回答。我学习了发送道具的新方法,并对应用程序的状态进行了多次更改。太棒了。我认为你的答案是最好的。非常感谢你。我从你那里知道了新方法,而不是打电话给你。非常感谢。我会在Drew Reese方法之后尝试。是的,当然这取决于你选择一种方法,但记住要尽可能让你的代码更简单和干净。非常感谢。我会在Drew Reese方法之后尝试。是的,当然这取决于你选择一种方法,但记住要尽可能让你的代码更简单和干净。