initial to gitea

This commit is contained in:
2025-02-23 10:43:08 +07:00
commit d6e3946296
183 changed files with 22627 additions and 0 deletions

170
contents/blogs/file-rec.mdx Normal file
View File

@@ -0,0 +1,170 @@
---
title: "Building a Recursive File System with React: A Deep Dive"
description: "Explore how to create a recursive file system in React. This blog post provides a comprehensive guide on building a file system where folders and files can be nested, added, renamed, and deleted."
date: 02-09-2024
authors:
- avatar: "https://ui.shadcn.com/avatars/02.png"
handle: nisabmohd
username: Nisab Mohd
handleUrl: "https://github.com/nisabmohd"
cover: "https://img.freepik.com/premium-vector/many-monsters-various-colors-doodle-come-bless-birthday-happy_577083-84.jpg?w=826"
---
## Introduction: Crafting a Recursive File System in React
In modern web development, creating interactive and dynamic file systems is a common requirement. Whether for managing documents, organizing projects, or building complex data structures, having a robust file system is crucial. In this blog post, well explore how to build a recursive file system in React, focusing on nested folders and files that can be added, renamed, or deleted.
Check out the project on [GitHub](https://github.com/nisabmohd/recursive-file-system-react) for a complete implementation.
## Project Overview
The Recursive File System project is designed to simulate a file management system where users can interact with folders and files dynamically. It supports the following features:
- **Adding New Folders and Files**: Create new folders and files within any existing folder.
- **Renaming Items**: Change the name of folders and files.
- **Deleting Items**: Remove folders and files from the file system.
- **Nested Structure**: Handle nested folders and files to create a hierarchical view.
## Key Features and Implementation
### 1. Recursive Data Structure
The core of the project is a recursive data structure that represents the file system. Each folder can contain other folders or files, and each file or folder has properties such as `id`, `name`, and `children` (for folders).
Heres a basic structure for a folder:
```jsx
const folder = {
id: "1",
name: "Documents",
type: "folder",
children: [
{ id: "2", name: "Resume.pdf", type: "file" },
{ id: "3", name: "CoverLetter.docx", type: "file" },
],
};
```
### 2. Components
The project includes several key components to handle different aspects of the file system:
- **FileExplorer**: Displays the entire file system and handles rendering folders and files.
```jsx
// src/components/FileExplorer.js
import React, { useState } from "react";
import Folder from "./Folder";
import File from "./File";
const FileExplorer = () => {
const [files, setFiles] = useState(initialData); // initialData is your recursive data structure
const addItem = (parentId, type) => {
// Logic to add a folder or file
};
const renameItem = (id, newName) => {
// Logic to rename a folder or file
};
const deleteItem = (id) => {
// Logic to delete a folder or file
};
return (
<div>
{files.map((file) =>
file.type === "folder" ? (
<Folder
key={file.id}
folder={file}
onAdd={addItem}
onRename={renameItem}
onDelete={deleteItem}
/>
) : (
<File
key={file.id}
file={file}
onRename={renameItem}
onDelete={deleteItem}
/>
)
)}
</div>
);
};
export default FileExplorer;
```
- **Folder**: Renders folders and handles nested items.
```jsx
// src/components/Folder.js
import React from "react";
import FileExplorer from "./FileExplorer";
const Folder = ({ folder, onAdd, onRename, onDelete }) => {
return (
<div>
<h3>{folder.name}</h3>
<button onClick={() => onAdd(folder.id, "folder")}>Add Folder</button>
<button onClick={() => onAdd(folder.id, "file")}>Add File</button>
<button onClick={() => onRename(folder.id, "New Name")}>Rename</button>
<button onClick={() => onDelete(folder.id)}>Delete</button>
{folder.children && <FileExplorer files={folder.children} />}
</div>
);
};
export default Folder;
```
- **File**: Renders individual files with options to rename and delete.
```jsx
// src/components/File.js
import React from "react";
const File = ({ file, onRename, onDelete }) => {
return (
<div>
<p>{file.name}</p>
<button onClick={() => onRename(file.id, "New Name")}>Rename</button>
<button onClick={() => onDelete(file.id)}>Delete</button>
</div>
);
};
export default File;
```
### 3. Handling State and Actions
State management is handled using React hooks like `useState` to manage the file system data. Actions such as adding, renaming, and deleting items update the state accordingly.
```jsx
const [files, setFiles] = useState(initialData);
const addItem = (parentId, type) => {
// Logic to add a new item to the file system
};
const renameItem = (id, newName) => {
// Logic to rename an existing item
};
const deleteItem = (id) => {
// Logic to delete an item
};
```
## Conclusion: Building a Dynamic File System with React
Creating a recursive file system in React is a powerful way to manage hierarchical data and provide a dynamic user experience. By leveraging React's component-based architecture and state management, you can build interactive file systems that handle complex nested structures efficiently.
Check out the full implementation on [GitHub](https://github.com/nisabmohd/recursive-file-system-react) and explore how these concepts can be applied to your own projects. Happy coding!
🚀📁

View File

@@ -0,0 +1,121 @@
---
title: "Using React Server Components and Server Actions in Next.js"
description: "Explore how to leverage React Server Components and Server Actions in Next.js to build modern, efficient web applications. Learn how these features enhance performance and simplify server-side logic."
date: 05-09-2024
authors:
- avatar: "https://ui.shadcn.com/avatars/02.png"
handle: reactdev
username: React Dev
handleUrl: "https://github.com/reactdev"
- avatar: "https://ui.shadcn.com/avatars/01.png"
handle: nextjsguru
username: Next.js Guru
handleUrl: "https://github.com/nextjsguru"
cover: "https://img.freepik.com/premium-vector/many-monsters-various-colors-doodle-come-bless-birthday-happy_577083-85.jpg?w=826"
---
## Introduction: Enhancing Next.js with React Server Components
Next.js has evolved to include powerful features like React Server Components and Server Actions, which offer a new way to handle server-side rendering and logic. These features provide a more efficient and streamlined approach to building web applications, allowing you to fetch data and render components on the server without compromising performance.
In this blog post, we'll explore how to use React Server Components and Server Actions in Next.js with practical examples and code snippets.
## What Are React Server Components?
React Server Components (RSC) are a new type of component introduced by React that allows you to render components on the server. This approach helps reduce the amount of JavaScript sent to the client and enhances performance by offloading rendering work to the server.
### Benefits of React Server Components
- **Improved Performance**: By rendering on the server, you reduce the amount of client-side JavaScript and improve load times.
- **Enhanced User Experience**: Faster initial page loads and smoother interactions.
- **Simplified Data Fetching**: Fetch data on the server and pass it directly to components.
### Example: Creating a Server Component
Heres a basic example of a React Server Component in a Next.js application:
```jsx
// app/components/UserProfile.server.js
import { getUserData } from "../lib/api";
export default async function UserProfile() {
const user = await getUserData();
return (
<div>
<h1>{user.name}</h1>
<p>{user.email}</p>
</div>
);
}
```
In this example, `UserProfile` is a server component that fetches user data on the server and renders it.
## What Are Server Actions?
Server Actions are functions that run on the server in response to user interactions or other events. They allow you to handle server-side logic, such as form submissions or API requests, directly from your React components.
### Benefits of Server Actions
- **Simplified Server Logic**: Write server-side code directly in your components.
- **Enhanced Security**: Handle sensitive operations on the server rather than the client.
- **Improved Performance**: Reduce client-side JavaScript and offload tasks to the server.
### Example: Using Server Actions
Heres how you can use Server Actions in a Next.js application to handle form submissions:
```jsx
// app/actions/submitForm.js
import { saveFormData } from "../lib/api";
export async function submitForm(data) {
await saveFormData(data);
return { success: true };
}
```
```jsx
// app/components/ContactForm.js
"use client";
import { submitForm } from "../actions/submitForm";
export default function ContactForm() {
const handleSubmit = async (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const result = await submitForm(Object.fromEntries(formData));
if (result.success) {
alert("Form submitted successfully!");
}
};
return (
<form onSubmit={handleSubmit}>
<label>
Name:
<input type="text" name="name" required />
</label>
<label>
Email:
<input type="email" name="email" required />
</label>
<button type="submit">Submit</button>
</form>
);
}
```
In this example, `submitForm` is a server action that processes form data on the server, and `ContactForm` is a client component that uses this action to handle form submissions.
## Conclusion: Leveraging Modern Features for Better Web Apps
React Server Components and Server Actions in Next.js provide powerful tools for building efficient, modern web applications. By leveraging these features, you can improve performance, simplify server-side logic, and create a more responsive user experience.
As you build your Next.js applications, consider incorporating React Server Components and Server Actions to take full advantage of the latest advancements in web development.
Happy coding!
🚀✨