从 db-models 响应本机获取
React Native fetch from db-models
我正在尝试从 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"
我还没有测试过,但你可以试试这个:
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
未在此处定义)
至于为什么要用prevState
,就是为了保持不变性。这里有更多信息:https://facebook.github.io/react/docs/react-component.html#setstate
我正在尝试从 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"
我还没有测试过,但你可以试试这个:
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
未在此处定义)
至于为什么要用prevState
,就是为了保持不变性。这里有更多信息:https://facebook.github.io/react/docs/react-component.html#setstate