我正在使用新的 React Context API 而不是 Redux 开发一个新的应用程序,之前使用Redux,当我需要获取用户列表时,我只需调用componentDidMount我的操作,但现在使用 React Context,我的操作就在里面我的消费者在我的渲染函数中,这意味着每次调用我的渲染函数时,它都会调用我的操作来获取我的用户列表,这并不好,因为我会做很多不必要的请求。
那么,我如何才能只调用一次我的动作,比如 incomponentDidMount而不是调用 render?
只是为了举例,看看这段代码:
假设我将所有内容都包装Providers在一个组件中,如下所示:
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>
    )
  }
}
然后我把这个 Provider 组件包装在我所有的应用程序中,如下所示:
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>
    )
  }
}
现在,例如在我的用户视图中,它将是这样的:
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>
    )
  }
}
我想要的是这个:
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>
    )
  }
}
但是当然上面的例子不起作用,因为getUsers它不在我的用户视图中。如果可能的话,正确的方法是什么?