2017-03-04 5 views
0

結果フォームデータベースを取得した後にリストビューを再レンダリングしたい。 Googleからほとんどすべての方法を試しましたが、うまく機能しません。データベースからのレコードは正しくフェッチされていますが、リストビューは更新されていません。以下の私のコードを見つけてください。私はデータベース&からの検索データを生きたい、私は私の問題を解決するネイティブ動的に反応するSQLiteからリストビュー

import React, { Component } from 'react'; 
 
import { StatusBar, ListView, Text, View } from 'react-native'; 
 
import { connect } from 'react-redux'; 
 
import { Container, Header, Title, Content, H3,Item,Input, ListItem, Button, Icon, Footer, FooterTab, Left, Right, Body } from 'native-base'; 
 

 
import { openDrawer } from '../../actions/drawer'; 
 
import styles from './styles'; 
 

 
class Dictionary extends Component { 
 

 
    static propTypes = { 
 
    openDrawer: React.PropTypes.func, 
 
    } 
 
    constructor(props) { 
 
    super(props); 
 
    const ds = new ListView.DataSource({rowHasChanged: (row1, row2) => row1 !== row2}); 
 
    this.state = { 
 
     dataSource: ds.cloneWithRows([]), 
 
     isLoading: false, 
 
    } 
 
    } 
 
    searchMatchingWords(keyWord) { 
 
    if(keyWord.length > 0) { 
 
     var temp = []; 
 
     db.executeSql("SELECT `English` FROM `dictionary` WHERE `English` LIKE '"+keyWord+"%' ORDER BY `English` ASC LIMIT 0, 30", [], function(results) { 
 
      var len = results.rows.length; 
 
      for (let i = 0; i < len; i++) { 
 
       temp.push(results.rows.item(i)); 
 
      } 
 
      this.setState({ 
 
       dataSource: this.state.dataSource.cloneWithRows(temp), 
 
      }); 
 
     }); 
 
    } 
 
    } 
 

 
    render() { 
 
    return (
 
     <Container style={styles.container}> 
 

 
     <Header> 
 
      <Left> 
 
      <Button transparent onPress={this.props.openDrawer}> 
 
       <Icon name="ios-menu" /> 
 
      </Button> 
 
      </Left> 
 
      <Body> 
 
      <Title>Search Words</Title> 
 
      </Body> 
 
      <Right /> 
 
     </Header> 
 
     <Header searchBar rounded> 
 
      <Item> 
 
      <Icon active name="search" /> 
 
      <Input placeholder="Search" onChangeText={(text) => this.searchMatchingWords(text)}/> 
 
      <Icon active name="bookmark" /> 
 
      </Item> 
 
      <Button transparent> 
 
      <Text>Search</Text> 
 
      </Button> 
 
     </Header> 
 

 
     <Content> 
 
      <View style={{flex: 1, paddingTop: 22}}> 
 
       <ListView 
 
       enableEmptySections={true} 
 
       dataSource={this.state.dataSource} 
 
       renderRow={(rowData) => 
 
        <ListItem> 
 
        <Text>{rowData.English}</Text> 
 
        <Right><Icon name="arrow-forward" /></Right> 
 
        </ListItem> 
 
       }/> 
 
      </View> 
 
     </Content> 
 

 
     </Container> 
 
    ); 
 
    } 
 
} 
 

 
function bindAction(dispatch) { 
 
    return { 
 
    openDrawer:() => dispatch(openDrawer()), 
 
    }; 
 
} 
 

 
const mapStateToProps = state => ({ 
 
    navigation: state.cardNavigation, 
 
    themeState: state.drawer.themeState, 
 
}); 
 

 
export default connect(mapStateToProps, bindAction)(Dictionary);

+0

= [] VaRのTEMPの後にこれを追加します。 temp = this.state.ds.slice(); chekcそれは私に知らせてください –

+0

その動作していない@ NiteshMishra –

答えて

0

リストビューでそれらを示しています。反応するネイティブsetStateに問題はありません。問題は

この

演算子とありました。

if(keyWord.length > 0) { 
 
     var temp = []; 
 
     var self = this; 
 
     db.executeSql("SELECT `English` FROM `dictionary` WHERE `English` LIKE '"+keyWord+"%' ORDER BY `English` ASC LIMIT 0, 30", [], function(results) { 
 
      var len = results.rows.length; 
 
      for (let i = 0; i < len; i++) { 
 
       temp.push(results.rows.item(i)); 
 
      } 
 
      self.setState({ 
 
       dataSource: self.state.dataSource.cloneWithRows(temp), 
 
      }); 
 
     }); 
 
    }

関連する問題