1
resposta

[Sugestão] Nao funciona para o React Native 0,65 Sem Expo(Solução)

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.

1 resposta

Oi Arthur, tudo bem?

Muito obrigada por compartilhar sua solução detalhada para o problema com o React Native 0.65 sem Expo! Tenho certeza de que isso será extremamente útil para outros estudantes que estão enfrentando dificuldades semelhantes.

A instalação do pacote @types/react-native-sqlite-storage realmente faz toda a diferença quando estamos trabalhando com TypeScript, pois ele fornece as definições de tipos necessárias para que o TypeScript entenda corretamente as funções e métodos disponíveis no pacote react-native-sqlite-storage.

Seu exemplo está muito bem explicado e organizado.

Agradeço novamente pela sua contribuição. Espero que isso ajude muitos outros estudantes a resolverem seus problemas com React Native e SQLite.

Um abraço e bons estudos.