Estive acompanhando o mesmo problema e consegui resolve o problema seguinte com a aula utilizando react native sem expo da aula "React native: guardando as informações localmente"
A criação do projeto com react native vem automaticamente com typescript atualmente
Segue o exemplo abaixo:
requisito mínimo para começar, segue a orientação abaixo.
instale react-native-sqlite-storage @types/react-native-sqlite-storage
npm install --save react-native-sqlite-storage
npm install @types/react-native-sqlite-storage
Código atualizado de SQLite.tsx e Notas.tsx da pasta Services abaixo:
Arquivo SQLite.tsx.
import SQLite from "react-native-sqlite-storage";
const database_name = "nota.db";
const AbreConexao = () => {
const database = SQLite.openDatabase(
{
name: database_name,
location: "default"
},
() => {},
(error) => { console.log(error)}
)
return database;
}
export const db = AbreConexao();
Arquivo Notas.tsx
import { db } from "./SQLite";
export function CriarTabela() {
db.transaction((tx) => {
tx.executeSql("CREATE TABLE IF NOT EXISTS Notas(id INTEGER PRIMARY KEY AUTOINCREMENT, titulo TEXT, categoria TEXT, texto TEXT);");
});
}
export async function AdicionaNota(nota: any) {
return new Promise((resolve) => {
db.transaction((tx) => {
tx.executeSql(
"INSERT INTO Notas(titulo, categoria, texto)" +
"VALUES(?, ?, ?)",
[nota.titulo, nota.categoria, nota.texto],
() => {
resolve("Nota adicionada com sucesso!")
},
(error) => {
console.log(error);
}
)
})
});
}
export async function AtualizaNota(nota: any) {
return new Promise((resolve) => {
db.transaction((tx) => {
tx.executeSql(
"UPDATE Notas SET titulo=?, categoria=?, texto=? where id=?",
[nota.titulo, nota.categoria, nota.texto, nota.id],
() => {
resolve("Nota atualizada com sucesso!")
},
(error) => {
console.log(error);
}
)
})
});
}
export async function RemoveNota(nota: any) {
return new Promise((resolve) => {
db.transaction((tx) => {
tx.executeSql(
"DELETE FROM Notas WHERE id=?",
[nota.id],
() => {
resolve("Nota removida com sucesso!")
},
(error) => {
console.log(error);
}
)
})
});
}
export async function BuscaNotas() {
return new Promise((resolve) => {
db.transaction((tx) => {
tx.executeSql(
"SELECT * FROM Notas",
[],
(transaction, resultado) => {
let tamanho = resultado.rows.length;
let dados = new Array();
for(var i = 0; i < tamanho; i++){
const dado = resultado.rows.item(i);
dados.push(dado);
}
resolve(dados);
},
(error) => {
console.log(error);
}
)
})
});
}
export async function filtraPorCategoria(categoria: string) {
return new Promise((resolve) => {
db.transaction((tx) => {
tx.executeSql("SELECT * FROM Notas WHERE categoria = ?;", [categoria], (tx, results) => {
let tamanho = results.rows.length;
let dados = new Array();
for(var i = 0; i < tamanho; i++){
const dado = results.rows.item(i);
dados.push(dado);
}
resolve(dados);
})
})
})
}
Não funcionava assim inicialmente porque não havia @types/react-native-sqlite-storage instalado. Após instalar @types/react-native-sqlite-storage, e rodei e funcionou. É uma sugestão ou solução do problema porque não houve como responder aquele fórum "Nao funciona para o React Native 0,65 Sem Expo" da aula de React native: guardando as informações localmente.