2017-12-15 6 views
-1

Ich versuche, eine Suchleiste von react-native-searchbar, um eine Liste zu filtern, so, aber es wirft einen Fehler, Abgeordneten ist nicht definiert. Ich weiß nicht, was ich von hier aus machen soll, tut mir leid, ganz neu bei RN! Die Daten stammen von einer Meteor App.Suchleiste mit React Native

class Flat_List extends Component{ 

    constructor(props){ 
    super(props); 
    this._handleResults = this._handleResults.bind(this); 
    this.state = { dataSource : { deputies } }; 
    } 

    _handleResults(results){ 
    this.setState({dataSource: this.props.deputies(results)}) 
    } 

    render(){ 
    const {deputies}= this.props; // the list is here 

    return(
     <View> 

     <SearchBar 
      ref={(ref) => this.searchBar = ref} 
      data={deputies} 
      handleResults={this._handleResults.bind(this)} 
      showOnLoad 
      allDataOnEmptySearch 
      hideBack 
      autoCorrect= {false} 
     /> 

     <List> 
      <FlatList 
      data={this.props.deputies} 
      keyExtractor={(item)=> item._id} 
      renderItem={({item})=>(
      <DeputyDetail deputy={item.depute} navigation={this.props.navigation} />)} /> 
     </List> 

     </View> 
    ); 
    } 
export default createContainer(params => { 
    Meteor.subscribe('deputies'); 
    return { deputies: Meteor.collection('deputies').find() }; 
}, Flat_List); 
+0

Können Sie nach der Code für das Elternteil von 'Flat_List'/es ist die Aufrufseite? Es ist wahrscheinlich, dass du 'Requisiten 'nicht genau passierst, da sie nicht definiert sind, aber es ist einfacher zu debuggen, wenn wir die Elternkomponente sehen können. –

+0

Eigentlich ist das die Eltern ist, stammen die Daten aus Exportstandardcreate (params => { Meteor.subscribe (Deputierten '); return { Stellvertreter: Meteor.collection ('Stellvertreter') finden(), . }; }, Flat_List); – Sonia

+0

Ok, du solltest damit beginnen, dass "this.props.deputies" ankommt, wenn "render" aufgerufen wird. Wenn nicht, wird es nicht definiert. Das ist dein erster Schritt. Sie können hinzufügen, dass die Daten mit dem ternären Operator 'this.props.deputies 'eintreffen. this.props.deputies: ["Daten nicht angekommen"] '- wenn es nicht ankommt, wird es zu der Zeit undefiniert sein, wenn 'render' aufgerufen wird. Es gibt ein paar andere Probleme mit dem Code, aber fang dort an! –

Antwort

0

Ihre Statusdeklaration ist ungültig. Hinzufügen/bearbeiten Sie diese Zeilen in Ihrem Konstruktor():

const { deputies } = this.props; 
this.state={ 
    dataSource: deputies 
} 
+0

Ich versuchte dies, aber kein Erfolg – Sonia

+0

es sagt "Abgeordnete ist nicht definiert" – Sonia

+0

Können Sie uns zeigen, wie Sie 'Deputies' in Ihre' 'Komponente? – jkhedani

0
constructor(props){ 

    super(props); 
    this._handleResults = this._handleResults.bind(this); 
    this.state={ 
     dataSource : {deputies} // Here -> You doesn't define deputies 
    } 
} 

Nur diese Zeile hinzufügen, bevor this.state:

const { deputies } = props // You don't need 'this' because 'props' is already in the constructor params. 

Oder Sie können es direkt setzen ->this.state{ dataSource: props.deputies }

+0

Oder Sie können es direkt setzen -> this.state {dataSource: props.deputies} –

+0

Es wirft einen Fehler "Abgeordnete ist nicht definiert" – Sonia

+0

Sind Sie sicher, dass Sie diese Requisiten an diese Komponente übergeben? –