Je suis en train d'élaborer une nouvelle application à l'aide de la nouvelle Réagir Contexte de l'API au lieu de Redux, et avant, avec Redux
, quand j'en avais besoin pour obtenir une liste des utilisateurs, par exemple, j'ai simplement appeler en componentDidMount
de mon action, mais maintenant, avec Réagissent Contexte, mes actions vivre à l'intérieur de ma Consommation qui est à l'intérieur de ma fonction rendu, ce qui signifie que chaque fois que mon render fonction est appelée, il va appeler mon action pour obtenir ma liste des utilisateurs et qui n'est pas bien parce que je vais faire beaucoup d'élément de la demande.
Donc, comment je peux l'appeler qu'une seule fois mon action, comme en componentDidMount
au lieu de faire appel à rendre?
Juste pour donner un exemple, regardez ce code:
Supposons que je termine tous mes Providers
dans un composant, comme ceci:
import React from 'react';
import UserProvider from './UserProvider';
import PostProvider from './PostProvider';
export default class Provider extends React.Component {
render(){
return(
<UserProvider>
<PostProvider>
{this.props.children}
</PostProvider>
</UserProvider>
)
}
}
Ensuite j'ai mis ce composant Fournisseur de emballage de tous mes app, comme ceci:
import React from 'react';
import Provider from './providers/Provider';
import { Router } from './Router';
export default class App extends React.Component {
render() {
const Component = Router();
return(
<Provider>
<Component />
</Provider>
)
}
}
Maintenant, à mon aux utilisateurs d'afficher, par exemple, il sera quelque chose comme ceci:
import React from 'react';
import UserContext from '../contexts/UserContext';
export default class Users extends React.Component {
render(){
return(
<UserContext.Consumer>
{({getUsers, users}) => {
getUsers();
return(
<h1>Users</h1>
<ul>
{users.map(user) => (
<li>{user.name}</li>
)}
</ul>
)
}}
</UserContext.Consumer>
)
}
}
Ce que je veux, c'est ceci:
import React from 'react';
import UserContext from '../contexts/UserContext';
export default class Users extends React.Component {
componentDidMount(){
this.props.getUsers();
}
render(){
return(
<UserContext.Consumer>
{({users}) => {
getUsers();
return(
<h1>Users</h1>
<ul>
{users.map(user) => (
<li>{user.name}</li>
)}
</ul>
)
}}
</UserContext.Consumer>
)
}
}
Mais bien sûr que l'exemple ci-dessus ne fonctionnent pas parce que l' getUsers
ne vivent pas dans mes Utilisateurs propriétés de la vue. Quelle est la bonne façon de le faire si cela est possible?