You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中传递SQLite查询结果至下一页为空的问题求助

解决React Native+SQLite跳转传参为空的问题

看起来你遇到的核心问题是异步查询的结果没有正确传递,还有代码里传参的方式不对——你现在直接把函数this.searchCars传过去了,而不是它执行后得到的查询结果。结合React Native和SQLite的特性,我给你梳理下问题和解决办法:

首先看你代码里的关键问题

你按钮的 onPress 代码是这样的:

onPress={() => navigate('SearchResultView', {data: this.searchCars}) }

这里你传递的是searchCars函数本身,不是它执行后返回的查询结果。而且SQLite查询是异步操作,就算你改成this.searchCars(),也没法直接拿到同步结果,因为查询还没完成跳转就已经执行了。

修正方案:用Promise/async await处理异步查询

我推荐用Promise封装你的SQLite查询逻辑,这样就能在查询完成后再跳转传参:

第一步:封装异步查询函数

把searchCars改成返回Promise的函数,确保查询完成后再返回结果:

searchCars = () => {
  return new Promise((resolve, reject) => {
    const { brandSearch, modelSearch } = this.state;
    // 执行SQLite查询
    db.transaction(tx => {
      tx.executeSql(
        // 这里用模糊查询匹配品牌和型号,可根据你的需求调整
        'SELECT * FROM cars WHERE brand LIKE ? AND model LIKE ?',
        [`%${brandSearch}%`, `%${modelSearch}%`],
        (_, { rows }) => {
          // 把SQLite返回的rows转成数组格式
          const carList = rows._array;
          resolve(carList);
        },
        (_, error) => {
          reject(error);
          return false; // 阻止错误传播
        }
      );
    });
  });
};

第二步:在按钮点击时等待查询结果再跳转

用async/await来等待Promise完成,拿到结果后再传递给下一个视图:

<Button 
  title="Wyszukaj" 
  color="#841584" 
  onPress={async () => {
    try {
      // 等待查询完成,拿到最终结果
      const searchResult = await this.searchCars();
      // 现在把结果传给下一个页面
      navigate('SearchResultView', { data: searchResult });
    } catch (error) {
      console.error('查询出错啦:', error);
      // 这里可以加个Alert提示用户查询失败
      // Alert.alert('错误', '查询车辆失败,请稍后重试');
    }
  }} 
/>

额外要检查的几个点

  • 确认你的SQLite数据库已经正确初始化,cars表存在且有数据,可以先在查询前打印brandSearch和modelSearch的值,确保参数是正确的。
  • 在SearchResultView页面,要正确读取参数:如果是React Navigation 5及以上版本,函数组件里用const { data } = route.params;,类组件里用this.props.route.params.data来获取传递的数据。
  • 如果不习惯用async/await,也可以用回调函数的方式处理异步查询,核心逻辑不变——必须等查询完成后再执行跳转传参。

内容的提问来源于stack exchange,提问作者Gwiazdek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:13:15