Реагировать на действие Redux Call внутри действия и получить возвращаемое значение - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь вызвать и выполнить действие из действия, чтобы получить запись базы данных по имени, затем я хочу использовать идентификатор записи роли в действии SignUp, которое вызывается в данный момент.

Как я могу повторно использовать код для моего действия GetRolebyName из действия регистрации, я пытался избежать выполнения одного и того же запроса APi в двух местах.

По сути, я просто пытаюсь посмотреть RoleId при создании пользователя.

Действия роли:

export const fetchRoleByName = name => async dispatch => {
    const response = await db.get(`/roles?name=${name}`);

    dispatch({
        type: FETCH_ROLE,
        payload: response.data[0]
    });
};

Действие регистрации:

export const signUp = values => async (dispatch, getState) => {
        const role = await dispatch(fetchRoleByName(values.userType))

        const response = await db.post('/users/',
            {
                ...values,
                roleId: role.id
            }
        );

        dispatch({
            type: SIGN_UP,
            payload: response.data
        });

        history.push('/');
    };

Решение:

Как указал Kaca992, действие fetchRoleByName фактически никогда ничего не возвращало, поэтому требуемое изменение было таким, как указано ниже;

export const fetchRoleByName = name => async dispatch => {
    const response = await db.get(`/roles?name=${name}`);

    const data = response && response.data && response.data[0];

    dispatch({
        type: FETCH_ROLE,
        payload: data
    });

    return data;
};

1 Ответ

2 голосов
/ 27 января 2020

Внутри fetchRoleByName просто вернуть ответ. Возвращение от отправки - это возвращаемое значение внутренней функции:

export const fetchRoleByName = name => async dispatch => {
    const response = await db.get(`/roles?name=${name}`);

    dispatch({
        type: FETCH_ROLE,
        payload: response.data[0]
    });

    return response; (or return response.data[0] if that is the role object you want, but then I would recommend writing it like this: response && response.data && response.data[0] just in case of hitting an unexisting value from db)
};

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...