Reactjs 虽然状态已更新,但不会重新呈现组件子级
在这种情况下,我并没有使用reducer来更新组件的状态更改。我将道具发送到子组件,我希望每次父组件上的状态更改时都会更新道具 在母组件中,我将状态currentPage默认设置为1Reactjs 虽然状态已更新,但不会重新呈现组件子级,reactjs,Reactjs,在这种情况下,我并没有使用reducer来更新组件的状态更改。我将道具发送到子组件,我希望每次父组件上的状态更改时都会更新道具 在母组件中,我将状态currentPage默认设置为1 const [pager, setPager] = useState({ currentPage: 1 }); const propToSend = pager.currentPage; //and make trigger change: const onClick = (e) => {
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方法之后尝试。是的,当然这取决于你选择一种方法,但记住要尽可能让你的代码更简单和干净。