Skip to content
youhoc
  • Pages
    • Home
    • Modern App Guidelines
    • Linux
      • Day 1: Linux Distributions & Navigation
      • Day 2: User Management
      • Day 3: File Permission & Ownership
      • Day 4: Package Management
      • Day 5: Services Management
    • Javascript
      • JS The Weird Part
        • Execution Context
        • Types & Operators
        • Objects & Functions
        • Error Handling & Strict Mode
        • Typescript, ES6, Tra
      • Modern JS
        • JS in the Browser
        • Data Storage JSON
        • Modern JS
        • Advanced Objects & Methods
        • Webpack & Babel
        • Async
      • jQuery
        • In-depth Analysis of jQuery
      • React-ready JS
        • Arrow Function
        • Template Literals
        • Logical AND, OR, Ternary, Nullish Operators
        • Destructuring & Rest Operator
        • Array Method
        • Immutability and Spread Operator
        • Promises, Async/Await, Callback
    • PHP
      • gruntJS
      • composer
      • MySQL
    • Docker
      • Container Basics
      • Container Networking
      • Container Image
      • Container Volume & Persistent Data
      • Dockerfile
      • Docker Compose
      • Docker Registry
    • Node.js
      • 1. Installing & Exploring
      • 2. Core Modules
      • 3. Get User Input
      • File System & Input Arguments
      • 5. Express Web Server
      • 6. Deploy to Heroku & Github
      • Authentication
      • 7. Databases
      • 8. Rest API
    • ReactJS
      • React from Andrew
        • Summary from Next
        • 1. Basics
        • 2. React Components
        • 3. Webpack
        • 4. Styling with SCSS
        • 5. React Router
        • 6. React Hook
      • Modern React From The Beginning
        • Intro to JSX
        • Vite Build Tools
        • Basic Component Creation
        • Component State
        • Props & Component Composition
        • useState with Inputs & Form Submission
        • useEffect, useRef & Local Storage
        • Async / Await and Http Request in React
        • React Router: Declarative Mode
        • ContextAPI
        • React Router: Framework Mode
          • File-routing & HTML Layouts
          • Server-side Data Query
          • Links & Navigation
          • Loaders
    • Typescript
      • Type User vs UserProp
    • Payload CMS

Type User vs UserProp

Why do UserDetailProp has to be a different type than User type?
export type User = {
id: string
name: string
email: string
// thêm password_hash nếu bạn muốn hiển thị / xử lý
}

type UserListProps = {
users: User[];
title?: string;
};

type UserDetailProps = {
user: User | null | undefined;
};

export const UserDetail = ({ user }: UserDetailProps) => {
The UserDetailProps type is different from the User type because it represents the shape of the props passed to the UserDetail component, not the User object itself. Here's why this distinction is useful:
Flexibility in Component Props
UserDetailProps allows the user prop to be User | null | undefined . This is important because the component needs to handle cases where the user data is not available (e.g., loading state, error state, or invalid user ID).
The User type alone would not account for null or undefined .
Separation of Concerns
The User type defines the structure of a user object (e.g., id, name, email). On the other hand, UserDetailProps defines how the UserDetail component expects its props to look. This separation makes the code more modular and easier to maintain.
Reusability
The User type can be reused across the application wherever user data is needed, while UserDetailProps is specific to the UserDetail component. This avoids coupling the component's props directly to the User type, making the component more reusable.
In summary, UserDetailProps is tailored to the needs of the UserDetail component, while User represents the data model for a user. This distinction improves type safety, flexibility, and maintainability.

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.