从db-models中反应Native get

时间:2017-01-25 15:17:01

标签: android react-native react-jsx

我正在尝试从db-models获取到ListView。这是我的代码:

export default class todoDB extends Component {
constructor(props) {
    super(props);
    this.state = {
        dataSource : new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2})
    };

}
componentDidMount () {
    this.fetchData();

}
fetchData () {
    DB.users.get_all(function(result) {
        let data = [];
        for(let i = 1; i <= result.totalrows; i++) {
            data.push(result.rows[i]);
        }
        this.setState({
            dataSource: dataSource.cloneWithRows(data),

        })

    });

}
render () {
    return (
        <ListView
            dataSource={this.state.dataSource}
            renderRow={this.renderList}
            />
    );
}
renderList (item) {
    return (
        <View>
            <Text>{item.age}</Text>
        </View>
    );
}};

跑步后我没有错误或任何输出,只有空屏幕。 我用

  • “react”:“15.4.2”,
  • “react-native”:“0.40.0”
  • “react-native-db-models”:“^ 0.1.3”

1 个答案:

答案 0 :(得分:3)

我没有测试过,但你可以尝试一下:

  fetchData() {
    DB.users.get_all((result) => {
      let data = [];
      for (let i = 1; i <= result.totalrows; i++) {
        data.push(result.rows[i]);
      }
      this.setState((prevState) => (
      {
        dataSource: prevState.dataSource.cloneWithRows(data)
      }));

    });
  }

更改是:使用箭头功能代替function(result)来保持this的范围并更新以前的状态prevState.dataSource.cloneWithRows(data)(在代码dataSource中未定义)< / p>

至于为何使用prevState,它是为了保持不变性。这里有更多信息:https://facebook.github.io/react/docs/react-component.html#setstate