Вы можете использовать методы жизненного цикла Redux, чтобы справиться с этим. Допустим, состояние вашего компонента сведений электронной почты выглядит примерно так:
export const initialState: StateShape = {
loading: false,
readOnlyEmailData: {
recipientEmails: null,
senderEmail: null,
body: null,
},
};
Когда компонент сведений электронной почты (назовем его EmailDetail.jsx) загружается, вы можете использовать ComponentDidMount (), чтобы получить и установить свой ценности.
Вероятно, у вас будут действия и средства создания действий, такие как getEmail, getEmailSuccess и getEmailError. Установите для загрузки значение true в getEmail, а затем снова false в случае успеха или ошибки. Вы можете добавить компонент счетчика с условным рендерингом (который легко позаимствовать из чего-то вроде MaterialUI) в EmailDetail, который виден только тогда, когда загрузка истинна, и отображать остальную часть вашего контента, когда загрузка ложна.
Когда пользователь нажимает кнопку «Назад» или иным образом уходит от компонента, componentWillUnmount () может быть предоставлен список действий, которые необходимо выполнить, когда компонент готовится к размонтированию. В этом случае вы можете использовать метод сброса для сброса загрузки и readOnlyEmailData в исходное состояние при отключении.
Когда пользователь щелкает новое электронное письмо, он загружает новые данные электронной почты при монтировании и показывает счетчик до тех пор, пока доступны новые данные электронной почты.
Есть другие способы сделать это, это не самый оптимизированный, но он должен работать немного лучше, чем то, что вы пробовали до сих пор. Надеюсь поможет :)