Javascript React组件在状态更改后不重新提交,尽管使用了setState()

Javascript 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

我试图从嵌入式sqlite数据库中获取数据,并以列表格式显示它。fetchData()函数正在工作,返回的结果正确。但是,当我使用setState()更新状态时,react没有重新渲染。 接下来,我尝试在componentDidMount()处使用数组['a','b','c']设置state()。React重新渲染并显示a、b、c

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])
函数,该函数比
每个函数都好

谢谢!这就解决了我的问题。