React v18 reducer 中保存了当前的未读信息在 A 组件中展示了所有未读信息在 B 组件中使用了userReducer获得了dispatch然后调用dispatch action deleteAll清理了所有未读信息但是在A 组件中没有变化
可能的原因是在A组件中展示未读信息的部分没有重新渲染。在React中,当组件的props或state发生变化时,组件会重新渲染。但是在这个情况下,虽然reducer中的状态发生了变化,但是A组件并没有重新渲染。
有几种方法可以解决这个问题:
-
使用React的Context API:使用Context将未读信息的状态提升到父组件中,然后在A组件中使用Context来获取并展示未读信息。当B组件调用dispatch action deleteAll清理未读信息时,父组件中的状态会发生变化,从而引发A组件的重新渲染。
-
使用React的useEffect钩子:在A组件中使用useEffect钩子来监听reducer中未读信息的变化。当未读信息发生变化时,重新渲染A组件。
下面是一个示例代码,展示了如何使用useEffect来监听reducer中未读信息的变化:
import React, { useEffect } from 'react';
import { useSelector } from 'react-redux';
const A = () => {
const unreadMessages = useSelector(state => state.unreadMessages);
useEffect(() => {
// 当未读信息发生变化时,重新渲染A组件
}, [unreadMessages]);
return (
<div>
{/* 展示未读信息 */}
{unreadMessages.map(message => (
<div key={message.id}>{message.text}</div>
))}
</div>
);
};
export default A;
通过使用useEffect钩子,当未读信息发生变化时,A组件会重新渲染并展示最新的未读信息
原文地址: https://www.cveoy.top/t/topic/iLSw 著作权归作者所有。请勿转载和采集!