可能的原因是在A组件中展示未读信息的部分没有重新渲染。在React中,当组件的props或state发生变化时,组件会重新渲染。但是在这个情况下,虽然reducer中的状态发生了变化,但是A组件并没有重新渲染。

有几种方法可以解决这个问题:

  1. 使用React的Context API:使用Context将未读信息的状态提升到父组件中,然后在A组件中使用Context来获取并展示未读信息。当B组件调用dispatch action deleteAll清理未读信息时,父组件中的状态会发生变化,从而引发A组件的重新渲染。

  2. 使用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组件会重新渲染并展示最新的未读信息

React v18 reducer 中保存了当前的未读信息在 A 组件中展示了所有未读信息在 B 组件中使用了userReducer获得了dispatch然后调用dispatch action deleteAll清理了所有未读信息但是在A 组件中没有变化

原文地址: https://www.cveoy.top/t/topic/iLSw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录