开发者问题收集

TypeError:未定义不是一个对象(评估'_expo.default.FileSystem')]

2019-08-19
5331

我尝试将数据库文件从 assets 导入 expo。但是它不起作用,并返回以下警告:

TypeError: undefined is not an object (evaluating '_expo.default.FileSystem')]

我尝试了很多次,如果我创建一个新数据库,它可以工作,但如果我尝试从 asset 加载现有数据库,它将不起作用

class Items extends React.Component {
  state = {
    items: null
  };

  componentDidMount = async () => {
    await Expo.FileSystem.downloadAsync(
      Expo.Asset.fromModule(require("./assets/exu-word.db")).uri,
      `${Expo.FileSystem.documentDirectory}SQLite/exu-word.db`
    );

    let db1 = SQLite.openDatabase("exu-word.db");
  };

  render() {

    const { items } = this.state;


    if (items === null || items.length === 0) {
      return null;
    }

    return (
      <View style={styles.sectionContainer}>

        {items.map(({ id, words }) => (
          <TouchableOpacity
            key={id}
            onPress={() => this.props.onPressItem && this.props.onPressItem(id)}
            style={{
              backgroundColor: "#fff",
              borderColor: "#000",
              borderWidth: 1,
              padding: 8
            }}
          >
            <Text style={{ color: "#000" }}>{words}</Text>
          </TouchableOpacity>
        ))}
      </View>
    );
  }

  update() {
    db.transaction(tx => {
      tx.executeSql(
        `select * from WORDS;`,
        [],
        (_, { rows: { _array } }) => this.setState({ items: _array })
      );
    });
  }
}
1个回答

我使用的是 "sdkVersion": "35.0.0" 。看来 Expo 改变了它的 API。 现在你需要安装一个单独的依赖项:

npm i --save expo-file-system

然后为你的组件单独导入 FileSystem 对象:

import * as FileSystem from 'expo-file-system';
Roman
2019-10-02