React useState 更新不是重新渲染组件

Posted

技术标签:

【中文标题】React useState 更新不是重新渲染组件【英文标题】:React useState update is not re-rendering component 【发布时间】:2021-03-10 15:09:26 【问题描述】:

我想重新渲染使用父组件状态作为道具的子组件。

我的场景: 并使用 react-slick 滑块在页面上显示图像,它有一个道具初始幻灯片,用于说明哪个滑块显示初始幻灯片。 我正在使用 useState() 来维护 initialSlide 值,页面上有另一个触发器更新了 initialSlide 值,当我更新 initialSlide 值时它不会重新渲染 react-slider。

请查看下面的演示代码: Demo

在上面的演示中,点击按钮> currentSlide 值更新> react-slider 不更新。

有没有办法在反应中实现这一点,我尝试使用 redux 存储但子组件永远不会重新渲染。

【问题讨论】:

【参考方案1】:

您可以使用sliderNext 和sliderPrev 方法。同样要使用它们,您应该通过useRef 钩子获得对滑块的引用。

使用该方法的示例:https://react-slick.neostack.com/docs/example/previous-next-methods/

工作滑块:https://stackblitz.com/edit/react-bwfh5g

【讨论】:

嗨 RukkiesMan,感谢您的回答。如果我使用更改幻灯片按钮转到下一张幻灯片,您给出的解决方案将起作用。如果我想从幻灯片 1 转到幻灯片 4,该怎么办?在那种情况下,我不能使用 slickPrev() 和 slickNext()。 嗨,我有另一种方法来解决我的问题:slickGoTo(),这会起作用。非常感谢! 酷!很高兴您找到了解决方案

以上是关于React useState 更新不是重新渲染组件的主要内容,如果未能解决你的问题,请参考以下文章

React 通过使用 useState 的功能变体来防止重新渲染

从组件中的 useState 多次调用 state updater 会导致多次重新渲染

防止在包装器组件中启动 useState 的兄弟组件的重新渲染

useReducer 和 useState

为啥 useState 不触发重新渲染?

React-useState实现