我有一個SQLite資料庫
id|title|content|date|
------------------------
1 |標題 | 內容 |y/m/d|
------------------------
這是從資料庫拿到的資料格式
const{items}=this.state
console.log(items)
<FlastList data={items}>
Array [
Object {
"content": "",
"date": "",
"id": ,
"title": "1sss",
},
Object {
"content": "",
"date": "",
"id": ,
"title": "",
},
新增、移除 然後更新state都可以成功更新flatlist,但是更改拿到的內容比如"content": 新增內容
似乎並不會讓flastList更新,有嘗試過extradata={this.state}
然後設定一個會改變狀態的state,也沒起作用,這種功能非常常見但我找不到解決辦法,有可能是我思路錯了,想問問是甚麼原因造成的。
更新:
應該說操作資料庫去更新裡面的鍵值,我有一個文字編輯器可以編輯文章然後更改內容
if(params.type==1){
db.transaction((tx) => {
tx.executeSql(
"update diary set(content,title,date)=(?,?,?) where id= ?",
[this.state.content, this.state.title, this.state.date.getFullYear(),params.cardId],
ToastAndroid.show("更新成功!", ToastAndroid.SHORT)
);
會從Textinput拿資料更新,然後我有一個HomeScreen
會從資料庫拿資料顯示在flatlist中,問題就出在編輯完HomeScreen重新render之後,flatlist的內容還是沒有變。
更新:
嘔我使用了一個笨方法解決,我複製items叫做items2
const item2 ={this.state.item}
然後在handleRefresh中替換原本的item
handleRefresh(){
this.setState({items: item2})
}
然後下拉就能更新了,不過理想還是希望他能自己更新,目前想法是使用timer定時更新可是感覺資料量大的時候一定會爆炸
可以試試看 useEffect()。
你使用 class 寫法,可以試試用 componentDidMount / componentDidUpdate