【问题标题】:unable to set record in react usestate array from sqlite无法从 sqlite 在 react usestate 数组中设置记录
【发布时间】:2020-07-31 06:54:11
【问题描述】:

我在 react native 中使用 sqlite 进行本地存储,但是当我尝试获取记录并将其设置到 useState 时,它​​不会更新状态 这是代码

const SelectQuery=async()=>{
const token = await AsyncStorage.getItem('docToken')
let selectQuery = await ExecuteQuery("SELECT * FROM DoctorConversations where d_phone=?",[token]);
var rows = selectQuery.rows;
var temp = [];
for (let i = 0; i < rows.length; i++) {
    temp.push(rows.item(i))
}
return temp;
}

这就是我的称呼

SelectQuery().then(res=>res.map(item=>{
  setFlatListItem([...flatListItem,item])
}))

【问题讨论】:

  • 这看起来不错,您是否尝试通过 SelectQuery() 打印返回值?可能是空的
  • 是的,它会打印控制台中的所有项目,但无法更新我的平面列表

标签: reactjs sqlite react-native react-redux react-native-flatlist


【解决方案1】:

我猜你有:

const [flatListItem, setFlatListItem] = useState([]);

setFlatListItem 更改内部状态并安排重新渲染。 flatListItem 仅在下一次渲染时获取新值。

您需要使用功能更新来修改当前的内部状态:

setFlatListItem(state => [...state, item])

如果要替换整个列表,则不需要映射单个项目:

SelectQuery().then(res=> setFlatListItem(res))

请注意,flatListItem 在您的情况下是一个坏名称,因为它包含一个数组。您可能应该将其重命名为 [flatList, setFlatList]

【讨论】:

  • 是的,你找到了我,我已经尝试过了。但是,仍然无法将其设置到平面列表中
  • 您想将所有行都放在flatListItem 中并用SelectQuery 中的新行替换所有行吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-02
  • 2021-02-01
  • 2022-01-22
  • 1970-01-01
  • 2020-11-02
  • 2019-07-08
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多