Acesso ao contexto de reação fora da função de renderização

Estou desenvolvendo um novo aplicativo usando a nova API do React Context em vez do Redux e, antes, comRedux, quando eu precisava obter uma lista de usuários, por exemplo, eu simplesmente chamavacomponentDidMount minha ação, mas agora com o React Context, minhas ações vivem dentro do consumidor, que está dentro da minha função de renderização, o que significa que toda vez que minha função de renderização é chamada, ela chama minha ação para obter a lista de usuários e isso não é bom porque eu fará muitos pedidos desnecessários.

Então, como posso chamar apenas uma vez minha ação, como emcomponentDidMount em vez de chamar render?

Apenas para exemplificar, veja este código:

Vamos supor que estou envolvendo todos os meusProviders em um componente, assim:

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>
    )
  }
}

Em seguida, coloquei esse componente do provedor, agrupando todo o meu aplicativo, assim:

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>
    )
  }
}

Agora, na minha opinião dos usuários, por exemplo, será algo como isto:

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>
    )
  }
}

O que eu quero é isso:

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>
    )
  }
}

Mas é claro que o exemplo acima não funciona porque ogetUsers não mora nos meus adereços de exibição de Usuários. Qual é a maneira correta de fazer isso, se for possível?

questionAnswers(3)

yourAnswerToTheQuestion