Thu. Nov 14th, 2024

Creación de una potente aplicación de notas con Tauri, React y TailwindCSS

By admin Jan 28, 2024

¡Acerca de la pila tecnológica!

Tauro es un marco para crear aplicaciones de escritorio multiplataforma utilizando tecnologías web como HTML, CSS y JavaScript. Proporciona un puente entre el frontend web y el backend nativo, lo que permite a los desarrolladores crear aplicaciones de escritorio de alto rendimiento y similares a las nativas.

Reaccionar es una biblioteca de JavaScript popular para crear interfaces de usuario. A menudo se utiliza en combinación con Tauri para crear aplicaciones de escritorio. Algunos beneficios de usar Tauri y React para aplicaciones de escritorio incluyen:

  • Reutilización del código: Con React, puede reutilizar componentes en diferentes plataformas, incluidas la web y el escritorio.
  • Eficiencia del desarrollador: La arquitectura basada en componentes y la sintaxis declarativa de React facilitan el desarrollo y mantenimiento de aplicaciones de escritorio complejas.
  • Actuación: Tauri aprovecha las tecnologías web al tiempo que proporciona un rendimiento similar al nativo, lo que lo hace adecuado para crear aplicaciones de escritorio de alto rendimiento.
  • Compatibilidad multiplataforma: Tauri y React le permiten crear aplicaciones que se ejecutan en múltiples sistemas operativos, incluidos Windows, macOS y Linux.
  • Ecosistema y comunidad: React tiene una comunidad grande y activa que proporciona una gran cantidad de recursos, bibliotecas y herramientas. Tauri también tiene una comunidad activa y proporciona documentación y soporte completos.

El uso conjunto de Tauri y React proporciona una forma poderosa y eficiente de desarrollar aplicaciones de escritorio con tecnologías web modernas.

¡Acerca de este tutorial!

Crear una aplicación de notas de escritorio con Tauri, React, Tailwind CSS y una base de datos de archivos planos es un proceso de varios pasos. Proporcionaré un esquema y fragmentos de código para guiarlo en la creación de dicha aplicación.

Configurar el proyecto

Cree un nuevo directorio para su proyecto:

mkdir desktop-note-app
cd desktop-note-app

Inicializar un nuevo proyecto Tauri:

npx tauri init

Crea una aplicación React dentro del proyecto Tauri:

npx create-react-app react-app

Instale las dependencias requeridas:

npm install --save react-query tailwindcss

Crear la base de datos de archivos planos

En este ejemplo, usaremos el fs Módulo para crear y administrar una base de datos de archivos planos para almacenar notas.

Cree un directorio para los archivos de su base de datos:

mkdir data

Crear un módulo JavaScript (database.js) para manejar operaciones de base de datos:

// database.js
const fs = require('fs');
const path = require('path');

const dbPath = path.join(__dirname, 'data', 'notes.json');

function readNotes() {
  try {
    const data = fs.readFileSync(dbPath, 'utf-8');
    return JSON.parse(data);
  } catch (error) {
    return [];
  }
}

function writeNotes(notes) {
  try {
    fs.writeFileSync(dbPath, JSON.stringify(notes, null, 2));
  } catch (error) {
    console.error('Error writing to database:', error);
  }
}

module.exports = { readNotes, writeNotes };

Crea la aplicación React Note

Actualizar el src/App.js archivo con el código de su aplicación React. Aquí hay un ejemplo simplificado:

import React, { useState } from 'react';
import { useQuery, useMutation } from 'react-query';

// Import other components and styles as needed

function App() {
  const { data: notes, isLoading } = useQuery('notes', fetchNotes);
  const [createNote] = useMutation(saveNote);

  const [newNote, setNewNote] = useState('');

  const handleNoteChange = (event) => {
    setNewNote(event.target.value);
  };

  const handleSaveNote = () => {
    createNote({ content: newNote });
    setNewNote('');
  };

  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-4">Notes</h1>
      <div className="mb-4">
        <textarea
          className="w-full border rounded p-2"
          placeholder="Enter a new note..."
          value={newNote}
          onChange={handleNoteChange}
        ></textarea>
        <button
          className="mt-2 bg-blue-500 text-white px-4 py-2 rounded"
          onClick={handleSaveNote}
        >
          Save Note
        </button>
      </div>
      {isLoading ? (
        <p>Loading...</p>
      ) : (
        <ul>
          {notes.map((note) => (
            <li key={note.id}>{note.content}</li>
          ))}
        </ul>
      )}
    </div>
  );
}

export default App;

Implementar funciones para buscar y guardar notas usando la base de datos de archivos planos (database.js) e intégrelos en su componente React.


Agregue, edite y elimine su nota

Para agregar la funcionalidad para agregar, editar y eliminar notas en su aplicación de notas de escritorio creada con Tauri, React, Tailwind CSS y una base de datos de archivo plano, puede seguir estos pasos:

Actualiza la aplicación React Note

Actualiza tu src/App.js archivo para incluir funciones para agregar, editar y eliminar notas:

import React, { useState } from 'react';
import { useQuery, useMutation } from 'react-query';
import { v4 as uuidv4 } from 'uuid'; // Add this import for generating unique IDs

// Import other components and styles as needed

function App() {
  const { data: notes, isLoading } = useQuery('notes', fetchNotes);
  const [createNote] = useMutation(saveNote);
  const [updateNote] = useMutation(editNote);
  const [deleteNote] = useMutation(removeNote);

  const [newNote, setNewNote] = useState('');
  const [editingNote, setEditingNote] = useState(null);

  const handleNoteChange = (event) => {
    setNewNote(event.target.value);
  };

  const handleEditNote = (note) => {
    setEditingNote(note);
    setNewNote(note.content);
  };

  const handleSaveNote = () => {
    if (editingNote) {
      updateNote({ id: editingNote.id, content: newNote });
      setEditingNote(null);
    } else {
      createNote({ id: uuidv4(), content: newNote }); // Generate a unique ID
    }
    setNewNote('');
  };

  const handleDeleteNote = (id) => {
    deleteNote(id);
  };

  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-4">Notes</h1>
      <div className="mb-4">
        <textarea
          className="w-full border rounded p-2"
          placeholder="Enter a new note..."
          value={newNote}
          onChange={handleNoteChange}
        ></textarea>
        <button
          className="mt-2 bg-blue-500 text-white px-4 py-2 rounded"
          onClick={handleSaveNote}
        >
          {editingNote ? 'Update Note' : 'Save Note'}
        </button>
      </div>
      {isLoading ? (
        <p>Loading...</p>
      ) : (
        <ul>
          {notes.map((note) => (
            <li key={note.id}>
              {note.content}
              <button
                className="ml-2 bg-red-500 text-white px-2 py-1 rounded"
                onClick={() => handleDeleteNote(note.id)}
              >
                Delete
              </button>
              <button
                className="ml-2 bg-yellow-500 text-white px-2 py-1 rounded"
                onClick={() => handleEditNote(note)}
              >
                Edit
              </button>
            </li>
          ))}
        </ul>
      )}
    </div>
  );
}

export default App;

Actualizar funciones de base de datos

Actualice las funciones en su database.js módulo para manejar la edición y eliminación de notas:

// database.js
// ... (previous code)

function editNoteById(id, newContent) {
  const notes = readNotes();
  const index = notes.findIndex((note) => note.id === id);
  if (index !== -1) {
    notes[index].content = newContent;
    writeNotes(notes);
  }
}

function removeNoteById(id) {
  const notes = readNotes();
  const updatedNotes = notes.filter((note) => note.id !== id);
  writeNotes(updatedNotes);
}

module.exports = { readNotes, writeNotes, editNoteById, removeNoteById };

Cree la aplicación Tauri para macOS

Para crear su aplicación Tauri para macOS, ejecute el siguiente comando:

npx tauri build --target osx --format dmg

Este comando generará un paquete de aplicación macOS (.dmg archivo) en el target/release/bundle directorio. Puede distribuir este paquete a Mac OS usuarios.

Ahora tienes una aplicación de notas de escritorio que te permite agregar, editar y eliminar notas. Cuando ejecuta la aplicación en macOS, debería funcionar como se esperaba, utilizando el marco Tauri para el entorno de escritorio.

Ahora, agreguemos una función de búsqueda que le permita buscar todas las notas en su aplicación de notas de escritorio creada con Tauri, React, Tailwind CSS y una base de datos de archivos planos. Puede seguir estos pasos:

Actualiza la aplicación React Note

Actualiza tu src/App.js archivo para incluir la función de búsqueda:

import React, { useState } from 'react';
import { useQuery, useMutation } from 'react-query';
import { v4 as uuidv4 } from 'uuid';

// Import other components and styles as needed

function App() {
  const { data: notes, isLoading } = useQuery('notes', fetchNotes);
  const [createNote] = useMutation(saveNote);
  const [updateNote] = useMutation(editNote);
  const [deleteNote] = useMutation(removeNote);

  const [newNote, setNewNote] = useState('');
  const [editingNote, setEditingNote] = useState(null);
  const [searchTerm, setSearchTerm] = useState('');

  const filteredNotes = notes.filter((note) =>
    note.content.toLowerCase().includes(searchTerm.toLowerCase())
  );

  const handleNoteChange = (event) => {
    setNewNote(event.target.value);
  };

  const handleEditNote = (note) => {
    setEditingNote(note);
    setNewNote(note.content);
  };

  const handleSaveNote = () => {
    if (editingNote) {
      updateNote({ id: editingNote.id, content: newNote });
      setEditingNote(null);
    } else {
      createNote({ id: uuidv4(), content: newNote });
    }
    setNewNote('');
  };

  const handleDeleteNote = (id) => {
    deleteNote(id);
  };

  const handleSearch = (event) => {
    setSearchTerm(event.target.value);
  };

  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-4">Notes</h1>
      <div className="mb-4">
        <input
          type="text"
          className="w-full border rounded p-2"
          placeholder="Search notes..."
          value={searchTerm}
          onChange={handleSearch}
        />
      </div>
      <div className="mb-4">
        <textarea
          className="w-full border rounded p-2"
          placeholder="Enter a new note..."
          value={newNote}
          onChange={handleNoteChange}
        ></textarea>
        <button
          className="mt-2 bg-blue-500 text-white px-4 py-2 rounded"
          onClick={handleSaveNote}
        >
          {editingNote ? 'Update Note' : 'Save Note'}
        </button>
      </div>
      {isLoading ? (
        <p>Loading...</p>
      ) : (
        <ul>
          {filteredNotes.map((note) => (
            <li key={note.id}>
              {note.content}
              <button
                className="ml-2 bg-red-500 text-white px-2 py-1 rounded"
                onClick={() => handleDeleteNote(note.id)}
              >
                Delete
              </button>
              <button
                className="ml-2 bg-yellow-500 text-white px-2 py-1 rounded"
                onClick={() => handleEditNote(note)}
              >
                Edit
              </button>
            </li>
          ))}
        </ul>
      )}
    </div>
  );
}

export default App;

Agregar función de búsqueda para filtrar notas

En tus App.js archivo, has añadido un searchTerm Variable de estado para almacenar la consulta de búsqueda del usuario. El filteredNotes La variable filtra las notas según el término de búsqueda y muestra solo las notas coincidentes.

Actualiza la aplicación Tauri

No es necesario realizar cambios en la aplicación Tauri para esta característica específica ya que la funcionalidad de búsqueda se implementa completamente en el lado del cliente.


Construya la aplicación Tauri

  1. Actualice la configuración de Tauri (tauri.conf.js) para incluir las configuraciones necesarias para su aplicación, incluido el tamaño de la ventana, el título y el menú.
  2. Crear un menú de shell Tauri (tauri.conf.json) para su aplicación.
  3. Agregue API de Tauri para acceder al sistema de archivos e interactuar con la base de datos en su componente React.
  4. Construya la aplicación Tauri:
npx tauri build

Ejecute la aplicación

Ejecute su aplicación Tauri:

npx tauri dev

Puede personalizar el diseño de la aplicación, agregándole más funcionalidades y opciones.


By admin

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *