Как передать действие другому действию, если нет параметров ReactJs - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть 2 действия в моем коде. Один получает данные на основе года, месяца и идентификатора пользователя.

Другой обновляет данные на основе некоторых других параметров.

После успешного выполнения второго метода я хочу выполнить первое действие, чтобы мой компонент повторно выполнил рендеринг с обновленным содержимым.

export const GetConsultantProjects = (userId, month, year) => {
    return (dispatch) => {
        dispatch({type: START_LOADING})
        globalAxios().get(`/api/v1/time_registrations`, {
            params: {
                user_id: userId,
                month: month,
                year: year
            }
        }).then(resultSet => {
            if (resultSet) {
                dispatch({type: STOP_LOADING})
                dispatch({type: GET_CONSULTANT_PROJECTS, payload: resultSet.data})
            }
        }).catch(err => {
            if (err.response) {
                console.log(err)
            }
        })
    }
}

export const UpdateProjectTime = (hour, date, projectId, userId, token, activity, timeId) => {
    let bodyFormData = new FormData();
    if(token && token.length !== 0) {bodyFormData.append('project[project_times_attributes][0][token]', token);}
    if(activity && activity.length !== 0) {bodyFormData.append('project[project_times_attributes][0][activity]', activity);}
    if(timeId && timeId.length !== 0) {bodyFormData.append('project[project_times_attributes][0][id]', timeId);}
    bodyFormData.append('project[project_times_attributes][0][user_id]', userId);
    bodyFormData.append('project[project_times_attributes][0][date]', date);
    bodyFormData.append('project[project_times_attributes][0][project_id]', projectId);
    bodyFormData.append('project[project_times_attributes][0][hours]', hour);
    return (dispatch) => {
        dispatch({type: START_LOADING})
        globalAxios().put(`/api/v1/time_registrations/${projectId}`, bodyFormData)
            .then(resultSet => {
                if (resultSet) {
                    dispatch(GetConsultantProjects()) // I want to run it again but I have no params here. How to pass them and run it again??
                    dispatch({type: UPDATE_PROJECT_TIME, payload: resultSet.data})
                    dispatch({type: STOP_LOADING})
                }
            }).catch(err => {
            if (err.response) {
                console.log(err)
            }
        })
    }
}

dispatch(GetConsultantProjects())

I хочу запустить его снова, но у меня нет параметров здесь. Как месяц, год и user_id.

Как передать их и запустить снова ??

1 Ответ

0 голосов
/ 24 апреля 2020

Когда речь заходит о вызове функции и вызове другой функции путем просмотра первых успешных состояний, вам определенно необходим способ обработки успешного состояния первой функции. Приведенная ниже песочница представляет собой пример решения для достижения того, что вы упомянули здесь. Что я делаю, так это получаю ответ об успешном завершении от первой функции в качестве подпорки и запускаю вторую функцию в componentWillUpdate.

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

Ссылка в песочнице: https://codesandbox.io/s/call-function-by-looking-at-another-functions-status-rn7hg

Откройте решение в новом окне и выполните отладку , Вы увидите, как поступает журнал консоли и каков поток вызывающих функций.

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