我是Redux的新概念,只是尝试在Redux状态更改时将className添加到App.js中的div。
const menuToggle = useSelector((state) => state.menuToggle);
<div className="App">
<div className={`layout-wrapper ${menuToggle ? 'toggled' : ''}`}>
<div className="layout-container">
Redux状态正在获取更改
当menuToggle变为true时,将添加className。但当它更新为false时,App.js不会重新呈现。
谁能告诉我我错过了什么?
2条答案
按热度按时间hts6caw31#
我觉得你的状态不对。
您拥有的是:
由于您随后访问
state.menuToggle
,它将返回一个对象而不是bool,并且对象是真实的。(现在嵌套了state.menuToggle.menuToggle
)属性返回到false
并不重要,因为state.menuToggle
仍然是一个对象,因此是真实的。您可能想知道为什么它第一次翻转--可能是因为初始状态是正确的形状,并且是触发动作/减缩器通过改变它以具有附加的嵌套层来打破该状态。简而言之,它 * 是 * 重新呈现,但正在读取的值不是你认为的值,一旦触发了切换操作,读取的值将永远停留在真实值上。
你的意思可能是让国家一直保持这种状态:
要修正这个问题,你可以把选择器改为
state.menuToggle.menuToggle
,但我认为真实的的修正是修正你的reducer或action中错误地设置状态形状的bug。svmlkihl2#
确保Redux存储已正确配置并确定了作用域。
下面是一个CodeSandbox demo的应用程序。
索引.jsx
应用程序.jsx
应用程序切片.jsx
存储.jsx
样式. css