2017-07-01 2 views
1

Ich erhalte diesen Fehler: this.props.postBooks ist keine Funktion.mapDispatchToProps funktioniert nicht. Requisiten leer

Ich habe eine Aktion - PostBooks - die ich versuche über Requisiten zu versenden.

Hier ist meine Komponente:

"use strict" 

import React from 'react' 
import {Well,Panel,FormControl,FormGroup,ControlLabel,Button} from 'react-bootstrap' 
import {connect} from 'react-redux' 
import {bindActionCreators} from 'redux' 
import {postBooks} from '../../actions/booksActions' 
import {findDOMNode} from 'react-dom' 

export class BooksForm extends React.Component{ 

    handleSubmit(){ 
     const book = [{ 
      title: findDOMNode(this.refs.title).value, 
      description: findDOMNode(this.refs.description).value, 
      price: findDOMNode(this.refs.price).value 
     }] 
     this.props.postBooks(book) 
    } 
    render(){ 

     return(
      <Well> 
       <Panel> 
        <FormGroup controlId='title'> 
         <ControlLabel> Title </ControlLabel> 
         <FormControl  
          type='text' 
          placeholder='Enter Title' 
          ref='title' /> 
        </FormGroup> 

        <FormGroup controlId='description'> 
         <ControlLabel> Enter Description </ControlLabel> 
         <FormControl  
          type='text' 
          placeholder='Enter Description' 
          ref='description' /> 
        </FormGroup> 

        <FormGroup controlId='price'> 
         <ControlLabel> Enter Price </ControlLabel> 
         <FormControl  
          type='text' 
          placeholder='Enter Price' 
          ref='price' /> 
        </FormGroup> 
        <Button 
        onClick={this.handleSubmit.bind(this)} 
        bsStyle='primary'> Enter New Book </Button> 

       </Panel> 
      </Well> 
      ) 
    } 

} 

function mapDispatchToProps(dispatch){ 
    return bindActionCreators({postBooks},dispatch) 
} 
export default connect(null,mapDispatchToProps)(BooksForm); 

Es scheint, dass Versand nicht zu Requisiten da auf Konsolenprotokollierung Requisiten wie erwartet abgebildet wird, Requisiten leer sind. Jede Hilfe wird geschätzt. Vielen Dank im Voraus

Edit: Hinzugefügt Aktionen

"use strict" 
// POST A BOOK 
export function postBooks(book){ 
    return { 
     type:"POST_BOOK", 
     payload: book 
    } 
} 
// DELETE A BOOK 
export function deleteBooks(id){ 
    return { 
     type:"DELETE_BOOK", 
     payload: id 
    } 
} 
//UPDATE BOOK 
export function updateBooks(book){ 
    return { 
     type:"UPDATE_BOOK", 
     payload: book 
    } 
} 

//Retrieve all books as if using API 

export function getBooks(){ 
    return{ 
     type:'GET_BOOKS' 
    } 
} 
+0

Können wir den 'mapDispatchToProps' Code sehen? – Li357

+0

Wenn ich Sie richtig verstehe, befindet sich die Funktion mapDispatchToProps am Ende des Komponentencodes. – bbmhmmad

Antwort

0

Bitte versuchen Sie es erneut, nachdem die redux Speicher importieren. Lassen Sie mich wissen, ob das funktioniert oder nicht. Und auch die Verwendung von Refs wird nicht empfohlen. https://facebook.github.io/react/docs/refs-and-the-dom.html

+0

Es hat nicht funktioniert ... – bbmhmmad

+0

Nehmen Sie die geschweiften Klammern um PostBooks innerhalb der BindActionCreators. Der Aktionsersteller sollte eine Funktion sein, du hast ihm ein Objekt gegeben. Ich denke, das ist das Problem. Gib mir Bescheid. – Phanindra

+0

Ich denke nicht. Indem ich das Objekt als so verwende, lasse ich bindActionCreators wissen, dass die postBooks-Prop in dieser Komponente die postBooks-Aktion versenden soll, die ich aus meinem bookActions-Modul importiert habe. Ich habe dieses Format vorher ohne Probleme benutzt. – bbmhmmad

3

Ich habe es herausgefunden.

Also habe ich Komponente nach oben exportieren und Standard exportieren unten.

bemerkte Webpack gab einen Fehler 'Import und Export möglicherweise nur auf oberster Ebene erscheinen'. Ging voran und entfernte Top-Export und funktioniert jetzt wie erwartet.

+1

Ich bin froh, dass es jetzt für dich funktioniert, aber ich glaube nicht, dass das dein Problem war. Der Unterschied zwischen 'export class BooksForm ...' und 'export default connect' ist, dass man mit' import {BooksForm} aus './BooksForm'' in eine andere Datei importiert wird und die andere '' BooksForm aus' ./BooksForm 'importiert. '(Beachten Sie die Klammern). Die Art und Weise, wie Sie exportieren, war in Ordnung und wird oft zu Testzwecken durchgeführt. Der Webpack-Fehler ist [wahrscheinlich auf einen Fehler in Ihrer Babel-Konfiguration zurückzuführen] (https://stackoverflow.com/questions/37902849/import-and-export-may-only-appear-at-the-top-level). –

+0

Ich habe auch meinen Export aus der Klassenzeile entfernt und mein Projekt neu aufgebaut, reagiere nativ. Funktioniert jetzt. Thanka. – Hesam

Verwandte Themen