Je sais, en utilisant Redux
j'ai en commun store
et quand je change d'emplacement, par exemple je suis passé de /videos
page, mais j'ai encore récupéré des vidéos dans mon videos
réducteur. Donc, si je décide de revenir à ma page videos
, je montre à l'utilisateur les vidéos déjà chargées de mon magasin, et je chargerai plus s'il en a besoin et les stocke.
Mais dans React
sans Redux
si je change d'emplacement /videos
où j'ai récupéré quelques vidéos, puis les ai stockées dans mon état local de mon composant VideosPage
, puis je suis revenu sur cette page, je n'ai plus de vidéos et je devrais les récupérer à partir de zéro.
Comment puis-je les mettre en cache et est-ce possible?
PS: C'est plus une question theoretical
donc aucun code n'est fourni.
La meilleure façon d'enregistrer des données lorsque vous souhaitez les repeupler ultérieurement est de les enregistrer dans localStorage
, ce qui vous permet d'obtenir les données même après avoir actualisé l'application
const InitialState = {
someState: 'a'
}
class App extends Component {
constructor(props) {
super(props);
// Retrieve the last state
this.state = localStorage.getItem("appState") ? JSON.parse(localStorage.getItem("appState")) : InitialState;
}
componentWillUnmount() {
// Remember state for the next mount
localStorage.setItem('appState', JSON.stringify(this.state));
}
render() {
...
}
}
export default App;
Vous pouvez mettre en cache avec: -
1) Stockage local
2) Boutique Redux
3) Gardez les données entre le montage et le démontage
import React, { Component, PropTypes } from 'react';
// Set initial state
let state = { counter: 5 };
class Counter extends Component {
constructor(props) {
super(props);
// Retrieve the last state
this.state = state;
this.onClick = this.onClick.bind(this);
}
componentWillUnmount() {
// Remember state for the next mount
state = this.state;
}
onClick(e) {
e.preventDefault();
this.setState(prev => ({ counter: prev.counter + 1 }));
}
render() {
return (
<div>
<span>{ this.state.counter }</span>
<button onClick={this.onClick}>Increase</button>
</div>
);
}
}
export default Counter;
Votre problème est que le composant est démonté lorsque vous naviguez.
Vous pouvez augmenter l'état vidéo jusqu'à un composant qui ne sera pas démonté.
ou
Si vous évitez le redux et selon la façon dont vous gérez la navigation, vous pouvez toujours avoir votre conteneur vidéo monté et si l'itinéraire correspond, il rend videos
sinon il renvoie null
.