0

I do understand Redux a bit, but I don't understand how you can put a function inside a function.

import api from '../utils/api';

import {
  GET_PROFILE, PROFILE_ERROR
} from './types';

export const getCurrentProfile = () => async (dispatch) => {
  try {
    const res = await api.get('/profile/me');

    dispatch({
      type: GET_PROFILE,
      payload: res.data
    });
  } catch (err) {
    dispatch({
      type: PROFILE_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status }
    });
  }
};

I am having issues with this line:

export const getCurrentProfile = () => **async (dispatch) => {}**
  1. Are we defining our own function here with async (dispatch) => {}?
  2. Why will we define our own function?
  3. I know what dispatch does, but where do we get it and why are we using it on the two objects?
  4. What is the name of this pattern, if any?
Emile Bergeron
  • 17,074
  • 5
  • 83
  • 129

1 Answers1

1
  1. yes. The getCurrentProfile returns a new function that takes one parameter.

  2. Maybe they will use the function in a closure. Closures can be used to hide information.

  3. Whatever is using the function you create will give the dispatch to the function when it calls it.

Alex
  • 710
  • 6
  • 8