Javascript React组件在状态更改后不重新提交,尽管使用了setState()
我试图从嵌入式sqlite数据库中获取数据,并以列表格式显示它。fetchData()函数正在工作,返回的结果正确。但是,当我使用setState()更新状态时,react没有重新渲染。 接下来,我尝试在componentDidMount()处使用数组['a','b','c']设置state()。React重新渲染并显示a、b、cJavascript React组件在状态更改后不重新提交,尽管使用了setState(),javascript,reactjs,typescript,electron,Javascript,Reactjs,Typescript,Electron,我试图从嵌入式sqlite数据库中获取数据,并以列表格式显示它。fetchData()函数正在工作,返回的结果正确。但是,当我使用setState()更新状态时,react没有重新渲染。 接下来,我尝试在componentDidMount()处使用数组['a','b','c']设置state()。React重新渲染并显示a、b、c import React from 'react'; import sqlite3 from 'sqlite3'; type MyProps = { }; ty
import React from 'react';
import sqlite3 from 'sqlite3';
type MyProps = { };
type MyState = { data: Array<string> };
class App extends React.Component<MyProps, MyState>{
constructor(props) {
super(props);
this.state = { data: [] };
}
async fetchData(){
var db = new sqlite3.Database({$DB_PATH});
var res: string[] = [];
await db.each('select * from table', [], (err, row) => { //selecting 10 rows from table
if (err) {
throw err;
}
res.push(row.name);
});
db.close();
console.log(this.state.data) //array length = 0
this.setState({data: res})
console.log(this.state.data) //array length = 10
}
async componentDidMount() {
await this.fetchData();
}
render() {
return (
<div>
<ul>
{this.state.data.map(el => (
<li>
{el}
</li>
))}
</ul>
</div>
);
}
}
export default App;
从“React”导入React;
从“sqlite3”导入sqlite3;
键入MyProps={};
类型MyState={data:Array};
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
this.state={data:[]};
}
异步获取数据(){
var db=new sqlite3.Database({$db_PATH});
var-res:string[]=[];
wait db.each('select*from table',[],(err,row)=>{//从表中选择10行
如果(错误){
犯错误;
}
res.push(行名称);
});
db.close();
console.log(this.state.data)//数组长度=0
this.setState({data:res})
console.log(this.state.data)//数组长度=10
}
异步组件didmount(){
等待此消息。fetchData();
}
render(){
返回(
{this.state.data.map(el=>(
-
{el}
))}
);
}
}
导出默认应用程序;
因为db。每个都不会返回承诺
,因此您无法通过“wait”语句获得结果。
请参阅,您将需要:
each(sql: string, params: any, callback?: (this: Statement, err: Error | null, row: any) => void, complete?: (err: Error | null, count: number) => void): this;
因此,您应该在complete
回调中访问结果,代码如下:
async fetchData(){
const db=new sqlite3.Database({$db_PATH});
常量res:string[]=[];
wait db.each('select*from table',[],(err,row)=>{//从表中选择10行
如果(错误){
犯错误;
}
res.push(行名称);
}, () => {
console.log(this.state.data)//数组长度=0
this.setState({data:res})
console.log(this.state.data)//数组长度=10
db.close();
});
}
希望这会有帮助
此外,您还可以尝试使用语句#all([param,],[callback])
函数,该函数比每个函数都好
谢谢!这就解决了我的问题。