2016-02-29 12 views
28

के बाद प्रतिक्रिया राउटर रीडायरेक्ट मैं प्रतिक्रिया-रेडक्स और मानक प्रतिक्रिया-रूटिंग का उपयोग कर रहा हूं। मुझे निश्चित कार्रवाई के बाद पुनर्निर्देशन की आवश्यकता है।एक्शन रेडक्स

उदाहरण के लिए: मेरे पास कुछ कदम पंजीकरण हैं। और कार्रवाई के बाद:

function registerStep1Success(object) { 
    return { 
     type: REGISTER_STEP1_SUCCESS, 
     status: object.status 
    }; 
} 

मैं चाहता हूं कि वह पंजीकरण चरण 2 के साथ पृष्ठ पर रीडायरेक्ट करें। यह कैसे करना है?

पेज। इतिहास में ब्राउज़र '/ पंजीकरणस्टेप 2' कभी नहीं रहा है। यह पृष्ठ केवल सफल परिणाम पंजीकरण चरण 1 पृष्ठ के बाद दिखाई देता है।

उत्तर

36
साथ

रूटर 2 + प्रतिक्रिया, जहाँ भी आप कार्रवाई प्रेषण, आप browserHistory.push() कॉल कर सकते हैं (या hashHistory.push() हैं कि आप क्या उपयोग है):

import { browserHistory } from 'react-router' 

// ... 
this.props.dispatch(registerStep1Success()) 
browserHistory.push('/registrationStep2') 

तुम भी यदि async कार्रवाई रचनाकारों से यह कर सकते हैं यही वह है जो आप उपयोग करते हैं।

+0

भविष्य में रेडक्स-राउटर का उपयोग करने वाले लाभ क्या हैं, जो अब बीटा में हैं? – ximet

+4

यदि आप कभी भी Redux DevTools रीप्ले रूटिंग संक्रमण चाहते हैं तो आपको https://github.com/acdlite/redux-router और https://github.com/reactjs/react-router-redux के बीच चयन करना होगा। इस मामले में मैं https://github.com/reactjs/react-router-redux की अनुशंसा करता हूं क्योंकि यह अधिक स्थिर और बहुत आसान है। –

+0

@DanAbramov ximet पूछने के बाद हम कार्रवाई के बाद रीडायरेक्ट कैसे कर सकते हैं? क्या यह Reducer में "पुश" करने के लिए सही है जो REGISTER_STEP1_SUCCESS को संभालता है? –

14

क्या आपने react-router-redux चेक आउट किया है? यह लाइब्रेरी रेडक्स के साथ प्रतिक्रिया-राउटर को सिंक करना संभव बनाता है।

यहां प्रलेखन से एक उदाहरण दिया गया है कि आप प्रतिक्रिया-राउटर-रेडक्स से पुश एक्शन के साथ पुनर्निर्देशन को कैसे कार्यान्वित कर सकते हैं।

import { routerMiddleware, push } from 'react-router-redux' 

// Apply the middleware to the store 
const middleware = routerMiddleware(browserHistory) 
const store = createStore(
    reducers, 
    applyMiddleware(middleware) 
) 

// Dispatch from anywhere like normal. 
store.dispatch(push('/foo')) 
+0

मुझे इसके बारे में पता है। लेकिन, मुझे आश्चर्य है कि मानक प्रतिक्रिया-रूटिंग – ximet

+13

का उपयोग करना और कार्रवाई के बाद दूसरे पृष्ठ पर रीडायरेक्ट करना (प्रतिक्रिया-राउटर-रेडक्स का उपयोग करना)। – ximet

+0

क्या आप रेड्यूसर के अंदर स्टोर तक पहुंच सकते हैं? – Ante

2

पर Eni Arinde पिछले जवाब के (मैं प्रतिष्ठा टिप्पणी करने के लिए नहीं है), यहाँ एक async कार्रवाई के बाद store.dispatch विधि का उपयोग करने के लिए कैसे है का निर्माण करने के लिए:

export function myAction(data) { 
    return (dispatch) => { 
     dispatch({ 
      type: ACTION_TYPE, 
      data, 
     }).then((response) => { 
      dispatch(push('/my_url')); 
     }); 
    }; 
} 

चाल में यह करने के लिए है कार्रवाई फाइलें और reducers में नहीं, क्योंकि reducers दुष्प्रभाव नहीं होना चाहिए।

+0

यहां तक ​​कि यह समाधान काम करता है, कार्यों को सभी आईएमओ में रूटिंग के बारे में पता नहीं होना चाहिए। आप बिना किसी रूटिंग के एक क्रिया प्रेषण करने में सक्षम होना चाहिए। – wintercounter

+0

क्या यह समस्या से निपटने का एक सही तरीका है? क्या हमें रूटिंग के लिए घटक निर्माता से घटक ऑब्जेक्ट को पास करना चाहिए? –

संबंधित मुद्दे