2016-02-15 3 views
9

Например, у меня есть список городов. Мне нужно создать что-то вроде thisреакция-нативный Автозаполнение текстового ввода

Как его создать (для Android и IOS)? И где я должен его хранить?

+0

Нам нужно больше информации, чтобы помочь. У вас есть данные, хранящиеся локально? Получаете ли вы данные с запросом? Может быть, разместите какой-нибудь код, чтобы мы могли видеть, где ваша проблема. –

+0

Мои данные хранятся в json-файле. – zlFast

ответ

16

ОК, так что на основании мало информации вы дали нам, я пытался сделать быстрый пример (не дизайн вообще), которые вы можете найти here

Я дам вам сделать укладку.

Чтение данных из файла сына: проверить this

кода является следующее:

'use strict'; 

var React = require('react-native'); 
var { 
    AppRegistry, 
    Component, 
    StyleSheet, 
    Text, 
    TextInput, 
    ListView, 
    View, 
} = React; 

var adresses = [ 
    { 
    street: "1 Martin Place", 
     city: "Sydney", 
    country: "Australia" 
    },{ 
    street: "1 Martin Street", 
     city: "Sydney", 
    country: "Australia" 
    } 
]; 

var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 

class SampleApp extends Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     searchedAdresses: [] 
    }; 
    }; 

    searchedAdresses = (searchedText) => { 
    var searchedAdresses = adresses.filter(function(adress) { 
     return adress.street.toLowerCase().indexOf(searchedText.toLowerCase()) > -1; 
    }); 
    this.setState({searchedAdresses: searchedAdresses}); 
    }; 

    renderAdress = (adress) => { 
    return (
     <View> 
     <Text>{adress.street}, {adress.city}, {adress.country}</Text> 
     </View> 
    ); 
    }; 
    render() { 
    return (
     <View style={styles.container}> 
     <TextInput 
      style={styles.textinput} 
      onChangeText={this.searchedAdresses} 
      placeholder="Type your adress here" /> 
     <ListView 
        dataSource={ds.cloneWithRows(this.state.searchedAdresses)} 
      renderRow={this.renderAdress} /> 
     </View> 
    ); 
    }; 
} 

var styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: 'center', 
    alignItems: 'center', 
    backgroundColor: '#FFFFFF', 
    }, 
    textinput: { 
    marginTop: 30, 
    backgroundColor: '#DDDDDD', 
    height: 40, 
    width: 200 
    } 
}); 

AppRegistry.registerComponent('SampleApp',() => SampleApp); 
+0

спасибо за это решение! – mvdb

+3

Это больше не доступно ... – Gp2mv3

+0

Ссылка не работает. – dhuma1981