2

최종 구매 페이지로 이동하려면 여러 경로를 거쳐야하는 구매 흐름을 만들고 있습니다. 예를 들어, 첫 번째 경로에는 우편 주소 정보를 입력하고, 두 번째 경로에는 구매 선택 항목, 세 번째 페이지에는 신용 카드 정보 등을 입력합니다. 총 약 5-6 페이지가 있습니다/routes. 라우터에 대한 제한 사항을 구현하여 첫 번째 페이지를 통과하지 못한 사람들이 두 번째 페이지에 액세스하지 못하게하려면 어떻게해야합니까?React Router 3.x는 흐름 외부의 페이지에 대한 액세스를 제한합니다.

저는 React Router 3.x, React 라우터 redux 4.x 및 React Boilerpate here을 사용하고 있습니다. React 라우터가 제공하는 onEnter 함수 사용에 대해 읽었지 만, React Boilerplate와 관련하여 특히 내가하려고하는 것과 같은 것을 실행하는 특정 문서를 어디에 배치해야하는지에 대한 구체적인 예를 찾을 수 없습니다.

누구에게도 아이디어/가이던스가 있습니까? 이 자바 스크립트의, 기술적으로

import { getAsyncInjectors } from 'utils/asyncInjectors'; 

const errorLoading = (err) => { 
    console.error('Dynamic page loading failed', err); // eslint-disable-line no-console 
}; 

const loadModule = (cb) => (componentModule) => { 
    cb(null, componentModule.default); 
}; 

export default function createRoutes(store) { 
    // Create reusable async injectors using getAsyncInjectors factory 
    const { injectReducer, injectSagas } = getAsyncInjectors(store); // eslint-disable-line no-unused-vars 

    return [ 
    { 
     path: '/paymentsPage/billing', 
     name: 'billing', 
     getComponent(nextState, cb) { 
     const importModules = Promise.all([ 
      import('containers/Billing'), 
     ]); 

     const renderRoute = loadModule(cb); 

     importModules.then(([component]) => { 
      renderRoute(component); 
     }); 

     importModules.catch(errorLoading); 
     }, 
    }, 
    { 
     path: '/paymentsPage/orgs', 
     name: 'orgs', 
     getComponent(nextState, cb) { 
     const importModules = Promise.all([ 
      import('containers/Organization/reducer'), 
      import('containers/Organization'), 
     ]); 

     const renderRoute = loadModule(cb); 

     importModules.then(([reducer, component]) => { 
      injectReducer('orgs', reducer.default); 
      renderRoute(component); 
     }); 

     importModules.catch(errorLoading); 
     }, 
    }, { 
     path: '/paymentsPage/amount', 
     name: 'amount', 
     getComponent(nextState, cb) { 
     const importModules = Promise.all([ 
      import('containers/Donation/reducer'), 
      import('containers/Donation'), 
     ]); 

     const renderRoute = loadModule(cb); 

     importModules.then(([reducer, component]) => { 
      injectReducer('amount', reducer.default); 
      renderRoute(component); 
     }); 

     importModules.catch(errorLoading); 
     }, 
    }, { 
     path: '/paymentsPage/finalPayment', 
     name: 'finalPayment', 
     getComponent(nextState, cb) { 
     const importModules = Promise.all([ 
      import('containers/FinalPayment/reducer'), 
      import('containers/FinalPayment'), 
     ]); 

     const renderRoute = loadModule(cb); 

     importModules.then(([reducer, component]) => { 
      injectReducer('finalPayment', reducer.ccInfoReducer); 
      injectReducer('finalPayment', reducer.paymentReducer); 
      renderRoute(component); 
     }); 

     importModules.catch(errorLoading); 
     }, 
    }, { 
     path: '/paymentsPage/confirmation', 
     name: 'confirmation', 
     getComponent(nextState, cb) { 
     const importModules = Promise.all([ 
      import('containers/Confirmation/reducer'), 
      import('containers/Confirmation'), 
     ]); 

     const renderRoute = loadModule(cb); 

     importModules.then(([reducer, component]) => { 
      injectReducer('confirmation', reducer.default); 
      renderRoute(component); 
     }); 

     importModules.catch(errorLoading); 
     }, 
    }, { 
     path: '*', 
     name: 'notfound', 
     getComponent(nextState, cb) { 
     import('containers/NotFoundPage') 
      .then(loadModule(cb)) 
      .catch(errorLoading); 
     }, 
    }, 
    ]; 
} 

답변

0

하므로, 어떠한 경로는 사용자가 약간의 조작으로 액세스 할 수 있습니다 - 참고로

내 루트 파일은 다음과 같이 (거의 기본 경로는 보일러에서 파일)을 찾습니다 . 사용자가 특정 경로 집합을 따르도록 유도하려는 경우 리디렉션을 사용할 수 있습니다. 예를 들어 구성 요소가 탑재되기 전에 상태 플래그를 검사 할 수 있으며 적절하게 설정되지 않은 경우 사용자가 있어야한다고 생각하는 경로로 리디렉션 할 수 있습니다.

핫 리로드 기능을 사용한 적이 있다면 webpack의 dev 서버 (및 기타 빌드 도구)가 작동하는 방식과 비슷한 방식으로 서버의 반응 구성 요소를 동적으로로드하는 것이 더 극단적 인 해결책이 될 수 있습니다 (면책 조항 : 이것을 시도한 적이 없으므로 얼마나 효과가 있을지 잘 모르겠습니다.) 이렇게하면 사용자에게 어떤 경로를 사용할 수 있는지에 대한 차별을 허용합니다. This 게시물 (다른 것들도 있습니다)은이 기법이 어떻게 작동하는지 대략적인 개요를 제공합니다.