2016-08-06 4 views
1

То, что я пытаюсь сделать:Реагировать Native - ListView Ошибка при получении данных на одном экране

Я пытаюсь иметь страницу, где вы можете искать для конкретных элементов, это посылает запрос к API который возвращает обратно набор значений, основанный на этом поиске.

В настоящее время я использую Listview, который не отображается до тех пор, пока пользователь не разместит поисковый запрос и не щелкнет нормально. После того как пользователь нажал кнопку «Поиск», представление списка затем будет обновлено с ответом.

Что происходит:

Когда пользователь нажимает кнопку поиска, я получаю следующее сообщение об ошибке:

Undefined is not an object (evaluating dataSource.rowIdentities)

Вот код до сих пор:

class Search extends Component { 

    constructor(props) { 
     super(props); 

     this.state = { 
      term: '', 
      showResults: false, 
      isSearch: false, 
      SearchResults: '' 
     } 

     this.ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
     this.state = { 
     SearchResults: this.ds.cloneWithRows(["Row 1", "Row 2"]), 
     }; 
    } 

    onSearchButtonPress() { 

     this.setState({isSearch: true}); 

    } 

    _renderCategoryIcon() { 


    } 

    _renderSearchResults(item) { 

     return (
      <Text>Hello world</Text> 


    ) 
    } 
    render() { 

     if(this.state.isSearch) 
     { 
      return (
       <ViewContainer> 
       <StatusBarBackground style={{backgroundColor: "#009fe3"}} navigator={this.props.navigator} /> 

       <SearchBar 
        placeholder='Search' 
        onChangeText={(text)=> this.setState({term: text})} 
        onSearchButtonPress={this.onSearchButtonPress.bind(this)} 
       /> 

       <ListView 
        style={styles.containerView} 
        enableEmptySections={true} 
        horizontal={false} 
        initialListSize={10} 
        dataSource={this.state.SeachResults} 
        automaticallyAdjustContentInsets={false} 
        renderRow={(item) => { return this._renderSearchResults(item) }} /> 

       </ViewContainer> 
     ); 

     }else{ 

     return (
      <ViewContainer> 
      <StatusBarBackground style={{backgroundColor: "#009fe3"}} navigator={this.props.navigator} /> 

      <SearchBar 
       placeholder='Search' 
       onChangeText={(text)=> this.setState({term: text})} 
       onSearchButtonPress={this.onSearchButtonPress.bind(this)} 
      /> 


      </ViewContainer> 
     ) 

     } 
    } 
} 


const styles = StyleSheet.create({ 
    title: { 
    fontSize:30, 

    }, 

}); 

ответ

2

Вы установили ваш по умолчанию SearchResults как пустая строка. Используйте пустой массив вместо:

this.state = { 
    term: '', 
    showResults: false, 
    isSearch: false, 
    SearchResults: this.ds.cloneWithRows([]) 
} 
+0

Неа .. Getting же ошибка :( – Phorce

+0

У вас есть орфографическая ошибка в JSX: 'DataSource = {this.state.SeachResults}' .. ваш отсутствующий "R" .. 'dataSource = {this.state.SearchResults}' что это? – David

+0

f да! 7-й вопрос, я смотрю с этим листом, и это рабочий ответ! хорошо сделано! (теперь я смотрю конечно, новая ошибка: D) – csomakk

Смежные вопросы