2017-03-24 13 views
31

मैं त्रुटि हो रही है पर रखें:प्रतिक्रिया-रूटर केवल एक ही बच्चा

A 'Router' may have only one child element

जब प्रतिक्रिया रूटर का उपयोग कर।

मैं क्यों इस काम नहीं कर रहा यह पता लगाने की है, क्योंकि यह वास्तव में कोड वे अपने उदाहरण में दिखाने की तरह है प्रतीत नहीं कर सकते हैं:

import React from 'react'; 
import Editorstore from './Editorstore'; 
import App from './components/editor/App'; 
import BaseLayer from './components/baselayer'; 
import {BrowserRouter as Router, Route} from 'react-router-dom'; 
import {render} from 'react-dom'; 

const root = document.createElement('div'); 
root.id = 'app'; 
document.body.appendChild(root); 

const store = new Editorstore(); 
const stylelist = ['https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css', 'https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.2/semantic.min.css', 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css', 'https://api.tiles.mapbox.com/mapbox-gl-js/v0.33.1/mapbox-gl.css']; 

stylelist.map((link) => { 
    const a = document.createElement('link'); 
    a.rel = 'stylesheet'; 
    a.href = link; 
    document.body.appendChild(a); 
    return null; 
}); 

render((
    <Router> 
    <Route exact path="/" component={BaseLayer} /> 
    <Route path="/editor" component={App} store={store} /> 
    </Router> 
), document.querySelector('#app')); 

मदद के लिए धन्यवाद: https://reacttraining.com/react-router/web/guides/quick-start

यहाँ मेरी कोड है

उत्तर

75

आपको अपने Route को <div> (या <Switch>) में लपेटना होगा।

render((
    <Router> 
    <Route exact path="/" component={BaseLayer} /> 
    <Route path="/editor" component={App} store={store} /> 
    </Router> 
), document.querySelector('#app')); 

render((
    <Router> 
    <div> 
     <Route exact path="/" component={BaseLayer} /> 
     <Route path="/editor" component={App} store={store} /> 
    </div> 
    </Router> 
), document.querySelector('#app')); 

jsfiddle/webpackbin

+13

अजीब। ऐसा क्यों है? – cameronroe

+2

['राउटर'] (https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Router.js#L53) उम्मीद करता है कि' this.props.children' ' शून्य 'या लंबाई 1 – QoP

+1

के बराबर है यह काम नहीं कर रहा है, यह सिर्फ एक ही स्थान पर दोनों मार्गों को प्रदर्शित करता है। – NSCoder

23

होना चाहिए यह react-router4.x में एक API परिवर्तन है। का हवाला देते हुए https://github.com/ReactTraining/react-router/issues/4131#issuecomment-274171357

:

इससे पहले कि आप पैरेंट टैग की जरूरत नहीं है जब

<Router> 
    <Route ...> 
    <Route ...> 
</Router> 

को
<Router> 
    <Switch> 
    <Route ...> 
    <Route ...> 
    </Switch> 
</Router> 
+0

स्विच करें मुझे * अनचाहे संदर्भ त्रुटि मिल रही है: स्विच परिभाषित नहीं किया गया है * जब मैं स्विच – NSCoder

+3

@NSCoder का उपयोग कर रहा हूं तो त्रुटि सुनिश्चित करें कि आप 'प्रतिक्रिया-राउटर' के '4.xx' संस्करण का उपयोग कर रहे हैं, और 'आवश्यकता' या 'आयात' अपने मॉड्यूल के शीर्ष पर 'स्विच' – FeifanZ

+0

मैंने स्विच आयात नहीं किया था, धन्यवाद। – NSCoder

0

यह समस्या तब होती है कन्वर्ट सुझाया गया तरीका एक Switch में Route रों रैप करने के लिए है <Route><Router> के अंदर इस समस्या को हल करने के लिएरखेंएक पैरेंट टैग में संलग्न जैसे <div>, <p> आदि उदाहरण -

<Router> 
    <p> 
     <Route path="/login" component={Login} /> 
     <Route path="/register" component={Register} /> 
    </p> 
</Router> 
संबंधित मुद्दे