【发布时间】:2019-10-05 19:06:56
【问题描述】:
我正在本地数据库(sqlite)中获取数据并更新状态,出现此错误:
无法对未安装的组件执行 React 状态更新。这是一个 >no-op,但它表明您的应用程序中存在内存泄漏。要解决此问题,请 > 在 >componentWillUnmount 方法中取消所有订阅和异步任务。
没有解决方案帮助我。
_isMounted = false;
constructor(props) {
super(props);
this.state = {
slug: "",
value: "",
cod_year: "",
months: [],
years: [],
loadingData: true,
};
}
db = openDatabase({ name: 'test.db', createFromLocation : '~my_finances.db'});
getYears = () => {
if(this.state.loadingData){
this.db.transaction((txn)=>{
txn.executeSql(
"SELECT cod, slug FROM year",
[],
(tx, res) => {
if(res.rows.length > 0){
rows = [];
for(let i=0; i<res.rows.length;i++){
rows.push(res.rows.item(i));
}
this.setState({years: rows}, {loadingData: false});
}
}
)
})
}
}
componentDidMount(){
this._isMounted = true;
this.getYears();
}
render() {
const state = this.state;
if(!state.loadingData){
const pickerItens = state.years.map((record, index) => {
<Picker.Item label={record.slug} value={record.cod}/>
})
return (
<View style={{flex: 1}} >
<ScrollView style={styles.container}>
<View style={styles.form_add}>
<Text style={styles.form_slug} > Adicionar </Text>
<TextInput
placeholder="Digite o mês..."
onChangeText={(slug) => { this.setState({slug}) }}
value={this.state.slug}
style={styles.input_add}
/>
<TextInput
placeholder="Digite o valor..."
onChangeText={(value) => { this.setState({value}) }}
value={this.state.value}
style={styles.input_add}
/>
<Picker onValueChange = {(cod_year) => {this.setState({cod_year})}}>
{ pickerItens }
</Picker>
<Button color="#7159C1" title="Salvar" onPress={() => this.addYear()} />
</View>
</ScrollView>
<Footer navigate={this.props.navigation.navigate} />
</View>
);
}else{
<Text> Loading... </Text>
}
}
【问题讨论】:
标签: javascript android react-native