React 和 Redux:在一个函数中调度所有操作

Posted

技术标签:

【中文标题】React 和 Redux:在一个函数中调度所有操作【英文标题】:React and Redux: Dispatching all actions within one function 【发布时间】:2021-02-23 16:11:48 【问题描述】:

在我的反应应用程序中,用户登录,然后在身份验证后定向到他/她的仪表板。为了在仪表板中显示用户的所有数据,我有一个单独的文件,其中有一个名为 getUserData() 的函数,它调度仪表板组件的所有操作,然后在 loadUser() 中调用 getUserData() 所以每个应用程序渲染它执行 loadUser() 的时间。随着应用程序变大,这是显示用户数据的良好做法和有效方式吗?或者有没有更好的方法来做到这一点,如果是这样,我很想知道。谢谢。

//App.js

const token = localStorage.getItem('token')
store.dispatch(type: USER_LOADING);
if(token)
    store.dispatch(type: USER_AUTHENTICATED)


class App extends Component
  componentDidMount()
    store.dispatch(loadUser());
  
  render()
  return(
  <Provider store=store>
  <div className="App">
    <Router>
      <Switch>
        <Route exact path="/login" component=LoginPage/>
        <ProtectedRoute exact path="/dashboard" component=Dashboard/>
       
      </Switch>
    </Router>
  </div>
  </Provider>

);

;

export default App;

//加载用户

export const loadUser = () => (dispatch, getState) =>

//dispatch(getNetworkList(config))
  axios.get('/api/user/', setAuthorizationHeader(getState))
    .then(res => 
      dispatch(
      type: USER_LOADED,
      payload: res.data
    )
    dispatch(getUserData())
  )
    .catch(err => 
      dispatch(returnErrors(err.response.data, err.response.status));
      dispatch(
        type: AUTH_ERROR
      );
    );
  ;

//获取用户数据

export const getUserData = () =>(dispatch) =>
        dispatch(userProfile())
        dispatch(getComments())
        dispatch(getInvites())
        dispatch(getNotifications())
        dispatch(getMessages())
        dispatch(getProjects())
        dispatch(getConnections())
        dispatch(getReply())
        dispatch(getPendingRequests())
        dispatch(getAssignedTasks())
    
;

【问题讨论】:

我认为你可以在 reducer 中编写一个单独的 Action 来完成你在 getUserData 中调用的所有动作的任务。 @tim_woods 你的仪表板必须分成一些选项卡...对吗? @Hend El Sahli 是的,不同的选项卡/组件不同 【参考方案1】:

我建议您应用所谓的 延迟加载 ...因此,如果 userProfile 在加载仪表板时是活动选项卡,则您仅调度 userProfile 操作... 并触发其余的动作onRelatedTabMounted

因为很可能,用户将针对特定信息(cmets、邀请...)...因此无需在仪表板加载时获取所有信息...

【讨论】:

以上是关于React 和 Redux:在一个函数中调度所有操作的主要内容,如果未能解决你的问题,请参考以下文章

在通过动作调度进行状态更新后,在 React 中使用 Redux 执行函数?

在React / Redux中,如果函数组件正在使用redux-thunk调度函数,则如何setIsLoading()?

React + redux:连接组件加载时调用调度

React Redux:调度时的无限循环

React-Redux 中的调度函数

Redux 状态不会随着动作调度而更新