This response outlines the key principles andbest practices for building robust and performant web applications using a combination of TypeScript, Node.js, Next.js App Router, React, Shadcn UI, Radix UI, and Tailwind CSS.
Key Principles
- Concise and Technical: Provide clear, concise, and technical responses with accurate TypeScript examples.
*Functional and Declarative: Embrace functional and declarative programming patterns. Avoid classes whenever possible. - Iteration and Modularization: Prioritize iteration and modularization over code duplication.
- Descriptive Naming: Use descriptive variable names with auxiliary verbs(e.g.,
isLoading
,hasError
). - File Structure: Organize files into logical units: exported components, subcomponents, helpers, static content, and types.
- Naming Conventions: Use lowercase with dashes for directories(e.g.,
components/auth-wizard
). Favor named exports for components. - RORO Pattern: Utilize the Receive an Object, Return an Object (RORO) pattern for functions.
JavaScript/TypeScript
- Function Keyword: Use the
function
keyword for pure functions.
*TypeScript Usage: Employ TypeScript for all code. Prefer interfaces over types. Avoid enums; use maps instead. - Syntax and Formatting:
- Omit semicolons.
- Avoid unnecessary curly braces in conditional statements.
- Use concise syntax for simple statements within conditionals.
*Utilize declarative JSX.
UI and Styling
- Component Libraries: Leverage Shadcn UI, Radix UI, and Tailwind CSS for components and styling.
- Responsive Design: Implement responsive design with Tailwind CSS using a mobile-first approach.
Performance Optimization
- MinimizeClient-Side Code: Minimize the use of
use client
,useEffect
, andsetState
. Favor React Server Components (RSC) for improved performance. - Suspense and Fallbacks: Wrap client components in
Suspense
with a fallback UI to provide a smooth user experience during loading. - Dynamic Loading:Implement dynamic loading for non-critical components to optimize initial page load times.
- Image Optimization:
- Use the WebP format for images.
- Include size data for images.
- Implement lazy loading for images.
Next.js Best Practices
- Data Fetchingand Rendering: Follow Next.js documentation for data fetching, rendering, and routing.
- URL Search Parameter State Management: Use
nuqs
for managing URL search parameter state. - Web Vitals Optimization: Optimize Web Vitals (LCP, CLS, FID) for a superior user experience.
use client
Limitation: Limit the use ofuse client
to small components that require Web API access. Avoid using it for data fetching or state management.- Server-Side Rendering (SSR): Favor server components and Next.js SSR for improved performance and SEO.
Solidity, TypeScript, Node.js, Next.js 14 App Router, React, Vite, Viem v2, Wagmi v2, Shadcn UI, Radix UI, and Tailwind Aria
This combination of technologies enables the development of robust and performant web applications with a focus on user experience and accessibility.
- Vite: Use Vite for rapid development and hot module replacement.
- Viem v2: Leverage Viem v2 for building accessible and performant user interfaces.
- Wagmi v2: Integrate Wagmi v2 for seamless interaction with Web3 applications.
- Tailwind Aria:Utilize Tailwind Aria for building accessible components with Tailwind CSS.
Example: Simple Counter Component
“`typescript
// components/counter.tsx
import { useState } from ‘react’;
interface CounterProps {
initialValue: number;
}
const Counter = ({ initialValue }: CounterProps) =\u003e{
const [count, setCount] = useState(initialValue);
const increment = () =\u003e setCount(count + 1);
const decrement = () =\u003e setCount(count – 1);
return (
\u003cdiv className=flex gap-4 items-center\u003e
\u003cbuttononClick={decrement} disabled={count === 0}\u003e
–
\u003c/button\u003e
\u003cspan className=text-xl font-bold\u003e{count}\u003c/span\u003e
\u003cbutton onClick={increment}\u003e+\u003c/button\u003e
\u003c/div\u003e
);
};
export default Counter;
“`
This exampledemonstrates the use of functional components, TypeScript interfaces, and Tailwind CSS for styling. The component utilizes the useState
hook for managing the count state and provides buttons for incrementing and decrementing the count.
Conclusion
By adhering to these principles and best practices, developers can build high-quality, performant, and accessible web applications using a combination of TypeScript, Node.js, Next.js App Router, React, Shadcn UI, Radix UI, and Tailwind CSS. This approach emphasizes modularity, code readability, and a focus on user experience.
Views: 0