redux-thunk에서 가입 성공 작업을 발송 한 후 history.push를 다른 페이지로 보내는 방법

림 보어

나는 redux-thunk최근에 사용 하고 있으며 다음과 같은 경우를 만납니다.

가입 작업 생성기 기능에서 history.push가입 성공 작업을 발송 한 후 수행하고 싶습니다 . 코드는 다음과 같습니다.

// SignupAction.js

export const signupRequest = (userData) => {
  return dispatch => {
    dispatch(signupPending())

    return axios.post('/api/user', userData)
      .then(res => dispatch(signupSuccess()))
      .then(() => {
        // wanna do history.push('/') to the home page after successfully signup
      })
      .catch(error => dispatch(signupFailure(error.message)))
  }
}

지금은 혼란 스럽습니다. 모든 로직을 하나의 액션에 넣으려고하는데 history가입 액션에 삽입 할 방법이 없습니다 . 내가 줄 수있는 signupRequest이 될 수 함수에게 두 번째 인수를 history개체 자체를 : signupRequest(userData, history), 또는 난 그냥 콜백을 전달할 수 있습니다 signupRequest(userData, callback). 그러나 나는 어느 것이 더 나은지 잘 모르겠습니다.

역사를 얻을 수있는 다른 방법도있다 (가) 그래서, 하나의 행동에 모든 논리를 넣을 필요가 없습니다 signup action단지 약속을 반환하고, 나는이 접근,이 경우, 구성 요소에서 나중에 처리 할 history것 매우 간단합니다.

// signupAction.js

export const signupRequest = (userData) => {
  return dispatch => {
    return axios.post('/api/users', userData);
  }
}

// signupForm.js
export default class SignupForm extends Component {
  // ...
  handleSubmit = e => {
    const userData = e.target.value
    this.props.signupRequest(userData)
      .then(() => this.props.dispatch(signupSuccess()))
      .then(() => {
        // now i can easily access history inside the component
        this.props.history.push('/')
      })
      .catch(error => dispatch(signupFailure(error.message)))  }
}

그렇다면 어떤 방법을 따라야하며이 문제를 해결하기위한 모범 사례가 있습니까?

림 보어

이것이 가장 좋은 방법입니다,하지만 난 볼 수 있는지 확인하면 어떤 사람들은 이런 식으로 작업을 수행합니다 솔루션을

핵심은 히스토리를 단일 파일에 넣어서 참조하고 컴포넌트 외부에서 사용할 수 있도록하는 것입니다.

먼저 histor독립 실행 형 파일에 y 개체를 만듭니다 .

// history.js
import { createBrowserHistory } from 'history';

export default createBrowserHistory();

그런 다음 Router구성 요소에 포장하고 다음 Router대신 사용하십시오 BrowserRouter.

import { Router, Route } from 'react-router-dom';
import history from './history';

ReactDOM.render(
  <Router history={history}>
    ...
  </Router>
)

마지막으로 redux actionCreators에서 history객체 를 가져 와서 사용할 수 있습니다.

// SignupAction.js
import history from './history'

export const signupRequest = (userData) => {
  return dispatch => {
    dispatch(signupPending())

    return axios.post('/api/user', userData)
      .then(res => dispatch(signupSuccess()))
      .then(() => {
        // we are reference/use the same `history` all the time by import it
        history.push('/')
      })
      .catch(error => dispatch(signupFailure(error.message)))
  }
}

그래서 기본적으로 저는 여전히 actionCreator 안에 로직을 넣는 것을 선호합니다. 컴포넌트는 UI 렌더링에만 초점을 맞춰야하며 로직은 대신 redux로 처리해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Firebase 및 HTML에서 성공적으로 가입 또는 로그인 한 후 사용자를 다른 페이지로 리디렉션하는 방법

분류에서Dev

CakePHP3에서 작업을 추가 한 후 페이지를 새로 고치지 않는 방법

분류에서Dev

반응 js 기능 구성 요소에서 작업이 발송 된 직후 redux 저장소에서 업데이트 된 값을 사용하는 방법

분류에서Dev

history.push를 사용할 때 한 구성 요소에서 다른 구성 요소로 상태 변수를 가져 오는 방법은 무엇입니까?

분류에서Dev

다른 방법으로 한 PHP 페이지에서 다른 페이지로 메시지를 전송하는 방법은 무엇입니까?

분류에서Dev

angularjs에서 성공적으로 로그인 한 후 다른 페이지로 리디렉션하는 방법은 무엇입니까?

분류에서Dev

먼저 "제출 성공"메시지를 표시 한 다음 다른 페이지로 전송하는 방법

분류에서Dev

WCF의 클래스에서 성공적으로 로그인 한 후 다른 페이지를 리디렉션하는 방법

분류에서Dev

페이지가로드 한 후 NULL이 아닌에서 getElementById의 다른를하는 방법

분류에서Dev

다른 구성 요소를 통해 속성을 업데이트 한 후 구성 요소가 Angular 2에서 렌더링되도록 트리거하는 방법은 무엇입니까? ngZone.run ()이 작동하지 않습니다.

분류에서Dev

컴포넌트를 후크에 반응, redux-thunk에 의해 트리거 된 redux 작업을 마이그레이션하는 방법은 무엇입니까?

분류에서Dev

한 페이지에서 다른 페이지로 가치를 전송하는 방법은 무엇입니까? 10 월 cms

분류에서Dev

다른 작업 이후에 gradle 작업을 실행하는 방법, 심지어 마지막 작업에도 실패한 종속성이 있습니다.

분류에서Dev

데이터베이스없이 html로 한 페이지에서 다른 페이지로 데이터를 전송하는 방법은 무엇입니까?

분류에서Dev

React에서 한 페이지에서 다른 페이지로 결과 데이터를 보내는 방법

분류에서Dev

localStorage로 전달한 후 다른 웹 페이지에 목록을 인쇄하는 방법은 무엇입니까?

분류에서Dev

동일한 페이지에서 두 가지 다른 작업을 수행 할 때 mapStateToProps () 함수를 처리하는 방법은 무엇입니까?

분류에서Dev

양식이없는 각 루프에 대해 한 JSP 페이지에서 다른 페이지로 값을 보내는 방법은 무엇입니까?

분류에서Dev

페이지를 다시로드 한 후에도 추가 행 및 해당 값을 유지하는 방법

분류에서Dev

기능 구성 요소에 대한 React-Redux + Redux-Thunk. API에서 데이터를 가져온 후 UI 업데이트

분류에서Dev

Django에서 성공적인 POST 요청 후 페이지를 리디렉션하는 가장 적절한 방법

분류에서Dev

이전 요청 수에 도달 한 후 다른 응답 (동일한 URL 및 요청)을 보내도록 wiremock을 구성하는 방법은 무엇입니까?

분류에서Dev

Puppeteer를 사용하여 현재 페이지에서 다른 페이지로 리디렉션 한 후 URL을 얻는 방법?

분류에서Dev

Vuex에 작업이 발송 된 후 구성 요소에 데이터를 전달하는 방법은 무엇입니까?

분류에서Dev

반응에서 양식 유효성 검사 후 사용자를 다음 페이지로 보내는 방법은 무엇입니까?

분류에서Dev

Frontier 서비스 제공 업체로 전환 한 후 Outlook에서 내 이메일을 보내는 방법

분류에서Dev

동일한 로그인 페이지 내에서로드하는 대신 로그인 후 자체 URL로 다른보기를 반환하는 방법은 무엇입니까? MVC

분류에서Dev

libGDX Gradle에서 복사 한 파일을 작업 공간에서 원래 프로젝트로 다시 내보내는 방법은 무엇입니까?

분류에서Dev

요청 작업으로 미들웨어를 처리하고 react + redux에서 성공 작업을 트리거하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Firebase 및 HTML에서 성공적으로 가입 또는 로그인 한 후 사용자를 다른 페이지로 리디렉션하는 방법

  2. 2

    CakePHP3에서 작업을 추가 한 후 페이지를 새로 고치지 않는 방법

  3. 3

    반응 js 기능 구성 요소에서 작업이 발송 된 직후 redux 저장소에서 업데이트 된 값을 사용하는 방법

  4. 4

    history.push를 사용할 때 한 구성 요소에서 다른 구성 요소로 상태 변수를 가져 오는 방법은 무엇입니까?

  5. 5

    다른 방법으로 한 PHP 페이지에서 다른 페이지로 메시지를 전송하는 방법은 무엇입니까?

  6. 6

    angularjs에서 성공적으로 로그인 한 후 다른 페이지로 리디렉션하는 방법은 무엇입니까?

  7. 7

    먼저 "제출 성공"메시지를 표시 한 다음 다른 페이지로 전송하는 방법

  8. 8

    WCF의 클래스에서 성공적으로 로그인 한 후 다른 페이지를 리디렉션하는 방법

  9. 9

    페이지가로드 한 후 NULL이 아닌에서 getElementById의 다른를하는 방법

  10. 10

    다른 구성 요소를 통해 속성을 업데이트 한 후 구성 요소가 Angular 2에서 렌더링되도록 트리거하는 방법은 무엇입니까? ngZone.run ()이 작동하지 않습니다.

  11. 11

    컴포넌트를 후크에 반응, redux-thunk에 의해 트리거 된 redux 작업을 마이그레이션하는 방법은 무엇입니까?

  12. 12

    한 페이지에서 다른 페이지로 가치를 전송하는 방법은 무엇입니까? 10 월 cms

  13. 13

    다른 작업 이후에 gradle 작업을 실행하는 방법, 심지어 마지막 작업에도 실패한 종속성이 있습니다.

  14. 14

    데이터베이스없이 html로 한 페이지에서 다른 페이지로 데이터를 전송하는 방법은 무엇입니까?

  15. 15

    React에서 한 페이지에서 다른 페이지로 결과 데이터를 보내는 방법

  16. 16

    localStorage로 전달한 후 다른 웹 페이지에 목록을 인쇄하는 방법은 무엇입니까?

  17. 17

    동일한 페이지에서 두 가지 다른 작업을 수행 할 때 mapStateToProps () 함수를 처리하는 방법은 무엇입니까?

  18. 18

    양식이없는 각 루프에 대해 한 JSP 페이지에서 다른 페이지로 값을 보내는 방법은 무엇입니까?

  19. 19

    페이지를 다시로드 한 후에도 추가 행 및 해당 값을 유지하는 방법

  20. 20

    기능 구성 요소에 대한 React-Redux + Redux-Thunk. API에서 데이터를 가져온 후 UI 업데이트

  21. 21

    Django에서 성공적인 POST 요청 후 페이지를 리디렉션하는 가장 적절한 방법

  22. 22

    이전 요청 수에 도달 한 후 다른 응답 (동일한 URL 및 요청)을 보내도록 wiremock을 구성하는 방법은 무엇입니까?

  23. 23

    Puppeteer를 사용하여 현재 페이지에서 다른 페이지로 리디렉션 한 후 URL을 얻는 방법?

  24. 24

    Vuex에 작업이 발송 된 후 구성 요소에 데이터를 전달하는 방법은 무엇입니까?

  25. 25

    반응에서 양식 유효성 검사 후 사용자를 다음 페이지로 보내는 방법은 무엇입니까?

  26. 26

    Frontier 서비스 제공 업체로 전환 한 후 Outlook에서 내 이메일을 보내는 방법

  27. 27

    동일한 로그인 페이지 내에서로드하는 대신 로그인 후 자체 URL로 다른보기를 반환하는 방법은 무엇입니까? MVC

  28. 28

    libGDX Gradle에서 복사 한 파일을 작업 공간에서 원래 프로젝트로 다시 내보내는 방법은 무엇입니까?

  29. 29

    요청 작업으로 미들웨어를 처리하고 react + redux에서 성공 작업을 트리거하는 방법은 무엇입니까?

뜨겁다태그

보관