2017-06-18 1 views
0

Ich bin neu in Redux und verwende derzeit eine API zum Abrufen von Daten. Ich versuche, den Status von meinem Elternteil an this.props.children mit React.cloneElement zu übergeben. Ich denke, dass ich einen Fehler mache, wenn ich React.cloneElement benutze, da der Debugger den Zustand zeigt, Null zu sein, wenn ich es an die cloneElement Funktion übergebe. Es folgt meine Eltern Methode machen:React-Redux-REST-API this.state ist null

render(){ 

    const {courses} = this.state; 
    debugger; 
    let fn = (child) => { 
     return React.cloneElement(child, { 
      courses: courses 
     }); 
    }; 

    let childrenWithProps = React.Children.map(this.props.children, fn); 

    return (
     <div> 
      <div className="container jumbotron jumbotron-fluid"> 
       <h1>CoursesPage</h1> 
       <p>This page adds and lists all the courses</p> 
       <Link to="/courses/courseslist"> 
        <Button color="primary">Course Listing</Button> 
       </Link> 
      </div> 
      {childrenWithProps} 
     </div> 

    ); 
} 

von der Konsole, kann ich ziemlich annehmen, dass es die Kinder richtig ruft, aber in den Kursen Nullwert übergeben. Wenn ich jedoch einfach <CourseList courses={courses} /> übergebe, nimmt es den Zustand korrekt an. Also, wo gehe ich genau falsch?

Ich erhalte den folgenden Fehler in der Konsole:

Uncaught TypeError: Cannot read property 'map' of undefined 
at CourseList (courseList.js:20) 
at ReactCompositeComponent.js:305 
at measureLifeCyclePerf (ReactCompositeComponent.js:75) 
at ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:304) 
at ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:279) 
at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:187) 
at Object.mountComponent (ReactReconciler.js:45) 
at ReactDOMComponent.mountChildren (ReactMultiChild.js:236) 
at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:703) 
at ReactDOMComponent.mountComponent (ReactDOMComponent.js:522) 

..wo courseList ist die untergeordnete Komponente.

Viel Hilfe geschätzt.

Antwort

1

Da Sie in einer Variablen aus der übergeordneten Klasse auf das Kind Klasse vorbei sind CourseList Sie props statt

const {courses} = this.props; 

Link zur Dokumentation Components and Props

Dies könnte verwenden müssen, was Sie stattdessen wollen .

+0

@X PLOT1ON, das hat sicherlich funktioniert, aber ich habe nicht klar aus der Dokumentation zu verstehen, wann dies this.state vs this.props vorzulegen. Wenn meine Absicht ist, den Staat zu klonen oder den Staat an meine Kind-Komponenten zu übergeben, wie kommt dann dieser.props hierher? – Omkar

+0

Vielleicht könnte dies eine bessere Möglichkeit, zwischen Requisiten und Staat zu unterscheiden https://stackoverflow.com/a/27992380/4540216 In einfachen Worten, Requisiten ist ein Objekt, was die untergeordnete Komponente akzeptiert und Zustand innerhalb der Komponente variabel sind Das kann das erneute Rendern auslösen – XPLOT1ON

+0

Ich habe gerade Ihren Code bearbeitet (und in meine Antwort eingefügt), Dies könnte sein, was Sie wollen, anstatt eine Kopie des Objekts zu erstellen. @ Omkar – XPLOT1ON

Verwandte Themen