если вы использовалиVue, вы должны знать, что у него есть очень полезный компонент (keep-alive), чтобы сохранить состояние компонента и избежать повторного повторного рендеринга.
Иногда мы хотим кэшировать состояние страницы списка после того, как страница списка переходит на страницу сведений; при возврате со страницы сведений на страницу списка страница списка остается такой же, как и до переключения.
На самом деле этого довольно сложно достичь, потому что компоненты в React нельзя использовать повторно после размонтирования. существуетissue #12039Два решения предложены в ; управлять отображением компонентов через стили (display:none | block;
), но это может вызвать проблемы, например, при переключении компонентов, без использования анимации или при использовании инструментов управления потоком данных, таких как Mobx и Redux, но это слишком громоздко.
Поэтому я сам реализовал версию Reactreact-keep-alive, который имеет тот же эффект, что и Vue<keep-alive>
То же самое, но есть некоторые различия в использовании.
React Keep Alive предоставляет<Provider>
, вы должны поставить<KeepAlive>
поставить в Провайдере, и каждый<KeepAlive>
Компоненты должны иметь уникальныйkey
.
import React from 'react';
import ReactDOM from 'react-dom';
import {
Provider,
KeepAlive,
} from 'react-keep-alive';
import Test from './views/Test';
ReactDOM.render(
<Provider>
<KeepAlive key="Test">
<Test />
</KeepAlive>
</Provider>,
document.getElementById('root'),
);
react-keep-alive
черезReact.createPortal APIосуществленный.react-keep-alive
Есть два основных компонента<Provider>
а также<KeepAlive>
;<Provider>
Отвечает за сохранение кеша компонента и его передачу перед обработкой.React.createPortal
API отображает кэшированные компоненты вне приложения. Кэшированные компоненты должны быть помещены в<KeepAlive>
середина,<KeepAlive>
Он будет монтировать компоненты, визуализированные вне приложения, там, где они действительно должны отображаться.
А еще я добавил два новых жизненных циклаcomponentDidActivate
а такжеcomponentWillUnactivate
, добавленный жизненный цикл:
Если вам интересно, вы можете зайти ко мнеgithubПроверь и прикрепикитайский документ.
Друзья, отметьтеIssuesкакие.