Sunday, January 12, 2025

js new 1

hoisting:
When a JavaScript function is called, several things happen:

Function Creation Phase:

Before executing the function, JavaScript creates a scope for the function. During this phase, all variable and function declarations are "hoisted" to the top of their containing function or global scope. This means that variable and function declarations are processed first, but their assignments are not.

Execution Phase:

After hoisting, the JavaScript engine begins executing the code line by line.
What actually happens:
Hoisting Phase:

The var i declaration is hoisted to the top of the function x, but the assignment i = 5 remains in its place.

Hoisted Code: (Conceptual Representation):

3 Execution Phase:

The JavaScript engine executes the setTimeout function call, which schedules the console.log(i) to run after 1 second.

It then assigns 5 to the variable i.

Because of hoisting, the variable i is known to exist throughout the entire function x. This is why, when the setTimeout callback executes, it can access the value of i and logs 5.

To summarize: When a function is called, its entire code isn't executed first before starting execution. Instead, variable and function declarations are hoisted to the top of their scope, and then the code is executed line by line. This process ensures that variable i is accessible within the setTimeout callback.


Saturday, December 28, 2024

Final Document

1.Difference between state and props?
Props
are read-only attributes that are passed from a parent component to a child component. They allow data and event handlers to be sent to child components.
State: Think of state like local variables in a function. They are declared and managed within the component.( or State: It's a way to keep track of information or data within a component. This information can change over time as the user interacts with the app or as data is updated.)

(State:Each component can have its own state. This means the data stored in the state is only available to that specific component.)




---------------------------------------------Question:2-----------------------------------------------------

2.When will you use state, context, and external state manager?

(i). STATE:Local State: Use state for managing local component data. This is data that is specific to one component and doesn't need to be shared with other components.
In Realtime used in: Simple Applications: For simple applications or components where the state is not deeply nested and doesn't need to be shared widely.
(ii). CONTEXT:Global State: Use context for managing global state that needs to be accessible by many components at different levels of the component tree.
In Realtime used in :Theming, Auth, Settings: Common use cases include theming, authentication, and user settings.

(iii). External State Manager
When to Use
:

  • Complex State Management: Use an external state manager like Redux or MobX for managing complex state that involves deeply nested data, multiple sources of truth, or when you need advanced features like middleware.

Large Applications: Ideal for large applications with a lot of state that needs to be shared across many components and modules.



For State example refer  QA -1
Below are the Context and Reducer code examples
Example with Redux:


Example with CreateContext



---------------------------------------------Question:3-----------------------------------------------------
3. How do you decide when to split a component into subcomponents?

Benefits of Splitting Components

  • Improved Readability: Smaller, focused components are easier to read and understand.
  • Reusability: Components can be reused across different parts of the application.
  • Maintainability: Easier to manage, debug, and test smaller components.

Final Thoughts

Splitting components should be driven by the need to simplify, reuse, and maintain your codebase. It’s a balance between having too many tiny components and overly large, complex ones. If it improves your code, it’s usually the right decision.

I hope this helps clarify when to split a component into subcomponents! If you have more questions, feel free to ask!

Guidelines for Splitting Components

  1. Single Responsibility Principle: Each component should ideally have one responsibility. If a component is doing too many things, consider splitting it.

    • Example: A component that handles both user authentication and displaying user profile information can be split into separate Auth and UserProfile components.

  2. Reusability: If a piece of UI or logic is used in multiple places, it should be a separate component.

    • Example: A Button component that is used in various forms throughout the app.

  3. Complexity Management: If a component grows too complex or large, making it difficult to understand, it's time to split it.

    • Example: A Dashboard component with multiple sections (charts, tables, notifications) can be broken down into Chart, Table, and Notification components.

  4. Separation of Concerns: Different concerns or functionalities should be handled by different components.

    • Example: A Form component that handles form submission logic and form field rendering can be split into Form and FormField components.

  5. Readability: If splitting a component makes the code easier to read and understand, it’s a good decision.

    • Example: A complex Header component with navigation, search bar, and user menu can be split into Nav, SearchBar, and UserMenu components.

  6. Logical Grouping: Group related logic and UI together in separate components.

    • Example: A ProductPage component with product details, reviews, and related products can be split into ProductDetails, ProductReviews, and RelatedProducts components.


---------------------------------------------Question:4-----------------------------------------------------
4.How do you handle API and what techniques you'll use when you've call APIs upfront vs when it's called based on user action?

Handling API calls in React involves choosing the right approach depending on whether the API should be called upfront (e.g., on component mount) or based on a user action (e.g., clicking a button). Let's break down both scenarios:

1. Calling APIs Upfront

When you need to fetch data as soon as a component mounts, you can use useEffect along with a data-fetching function. This is common for loading data required to render a component.

2. Calling APIs Based on User Action

When you need to fetch data based on a user action, such as clicking a button, you handle the API call inside an event handler.

EXAMPLE FOR 1 AND 2



  • Techniques and Best Practices
  • 1. Error Handling: Always handle errors gracefully, providing feedback to the user.
    • Try/Catch: Use try/catch blocks to catch and handle errors.
    • Error States: Maintain an error state to display error messages.
  • 2. Loading States: Provide visual feedback while data is being fetched.
    • Loading Indicators: Show a loading spinner or message when fetching data.
  • 3. Data Caching: Use libraries like React Query or SWR for caching and synchronizing data.
  • 4.Debouncing/Throttling: Use debounce or throttle techniques for input-based API calls to prevent excessive requests. Refer below image for 3 & 4 point


These practices help ensure smooth and efficient API calls, enhancing the overall user experience in your React applications.


---------------------------------------------Question:5-----------------------------------------------------

5.Explain some realtime usecases for Lodash.Debounce?

Lodash Debounce-is particularly useful in scenarios where you want to limit the frequency of events like user input or window resizing to improve performance and user experience. 
/(Using lodash.debounce in these ways helps improve performance and user experience by preventing functions from being called too frequently in response to rapid events.)

  • Here are some typical usecases:

Using lodash.debounce helps in controlling how often a function runs, especially during rapid actions like typing or scrolling. It waits a set time after the last action before running the function, preventing it from being called too often. This makes the app smoother and more efficient.

Friday, December 27, 2024

react useful links 11

  

  1. https://bigfrontend.dev/react 

  2. I collected all of the links in this post and wrote down bullet points for what I saw was repeatedly mentioned in the comments.

  3. I read every single page in the "Learn" section of the new React docs. This took two days as I was typing notes as I went along.

  4. Went through some practice problems and built a couple of user interfaces.I have yet to hear back about whether I'm being moved on to the next round but I thought I did pretty well. I was able to answer all of the questions I was asked about React and the coding portion was not difficult at all

In summary:

READ THE UPDATED REACT DOCUMENTATION (https://www.react.dev). It is very well written and the examples are great. I would not have been able to answer the majority of the questions in my interview if I had not read the docs. I'm not exaggerating even a little bit.In my opinion, if you're going for a mid level role, they're probably not going to ask you what state or props are, or what "lifting state up" means. Those are beginner questions that someone who has even 1 year of experience should already know.

  1. I would focus on knowing the major React Hooks. This was brought up repeatedly in the comments and the majority of my questions were based on Hooks.

- useState, useEffect, useRef, useReducer, useMemo, useCallback, useContext at the very minimum.

- When to use them, when not to use them.

- What does the second optional argument for useEffect do?

- What's the difference between useState and useRef?

- When would you use useState compared to useReducer?- What's the difference between useMemo and useCallback?

2. Custom Hooks - why you need them and how to write them.

- Examples: https://usehooks.com/

3. What can you do to improve the performance of your React application?- Know what the virtual DOM is and how React works in general- Memoization, lazy loading, dynamic imports, etc- Read this article

4. Something that the React docs mentioned over and over and that really stuck with me and changed my perspective on State and Hooks overall: learn when it's appropriate to use a Hook (useEffect in particular) and when to use an event handler.

Links I gathered from the comments (shout out to u/phiger78 for providing the majority of these):

- TypeScript tutorial - https://www.totaltypescript.com/tutorials

- Why booleans can be bad - https://kyleshevlin.com/enumerate-dont-booleanate

- React architecture - https://profy.dev/article/react-architecture-api-layer

- Using explicit States - https://www.youtube.com/watch?v=ul_3ABrpj64

- Frontend/React questions - https://greatfrontend.com/questions/react

- 100+ React questions - https://github.com/sudheerj/reactjs-interview-questions (some of these questions/answers haven't been updated for functional components so just be aware of that)



--------------


https://overreacted.io/a-complete-guide-to-useeffect/

Use this interview kit https://www.developerupdates.com/shop/front-end-developer-job-interview-kit

It covers most asked interview questions.






react links 10

 

  1. https://bigfrontend.dev/react 

  2. I collected all of the links in this post and wrote down bullet points for what I saw was repeatedly mentioned in the comments.

  3. I read every single page in the "Learn" section of the new React docs. This took two days as I was typing notes as I went along.

  4. Went through some practice problems and built a couple of user interfaces.I have yet to hear back about whether I'm being moved on to the next round but I thought I did pretty well. I was able to answer all of the questions I was asked about React and the coding portion was not difficult at all

In summary:

READ THE UPDATED REACT DOCUMENTATION (https://www.react.dev). It is very well written and the examples are great. I would not have been able to answer the majority of the questions in my interview if I had not read the docs. I'm not exaggerating even a little bit.In my opinion, if you're going for a mid level role, they're probably not going to ask you what state or props are, or what "lifting state up" means. Those are beginner questions that someone who has even 1 year of experience should already know.

  1. I would focus on knowing the major React Hooks. This was brought up repeatedly in the comments and the majority of my questions were based on Hooks.

- useState, useEffect, useRef, useReducer, useMemo, useCallback, useContext at the very minimum.

- When to use them, when not to use them.

- What does the second optional argument for useEffect do?

- What's the difference between useState and useRef?

- When would you use useState compared to useReducer?- What's the difference between useMemo and useCallback?

2. Custom Hooks - why you need them and how to write them.

- Examples: https://usehooks.com/

3. What can you do to improve the performance of your React application?- Know what the virtual DOM is and how React works in general- Memoization, lazy loading, dynamic imports, etc- Read this article

4. Something that the React docs mentioned over and over and that really stuck with me and changed my perspective on State and Hooks overall: learn when it's appropriate to use a Hook (useEffect in particular) and when to use an event handler.

Links I gathered from the comments (shout out to u/phiger78 for providing the majority of these):

- TypeScript tutorial - https://www.totaltypescript.com/tutorials

- Why booleans can be bad - https://kyleshevlin.com/enumerate-dont-booleanate

- React architecture - https://profy.dev/article/react-architecture-api-layer

- Using explicit States - https://www.youtube.com/watch?v=ul_3ABrpj64

- Frontend/React questions - https://greatfrontend.com/questions/react

- 100+ React questions - https://github.com/sudheerj/reactjs-interview-questions (some of these questions/answers haven't been updated for functional components so just be aware of that)



--------------


https://overreacted.io/a-complete-guide-to-useeffect/

Use this interview kit https://www.developerupdates.com/shop/front-end-developer-job-interview-kit

It covers most asked interview questions.







ERRORBOUNDRY--Fetching data using a custom hook-AND LifecycleHooks

Summary

  • componentDidMount: Called after the component is mounted. Ideal for fetching data or setting up subscriptions.

  • componentDidUpdate: Called after the component is updated. Useful for responding to changes in props or state.

  • componentWillUnmount: Called right before the component is unmounted. Perfect for cleanup tasks.

These lifecycle methods provide powerful hooks for managing the behavior of your components at different points in their lifecycle.


Certainly! React lifecycle methods can be categorized into three main phases: Mounting, Updating, and Unmounting. Here's a comprehensive overview of each phase and the associated lifecycle methods 



1.Example Implementation in Class Components-RightSide 

Functional Component Alternatives

In functional components, React hooks like useEffect and useState can be used to achieve similar lifecycle behaviors.


Summary

  • Mounting: constructor, getDerivedStateFromProps, render, componentDidMount

  • Updating: getDerivedStateFromProps, shouldComponentUpdate, render, getSnapshotBeforeUpdate, componentDidUpdate

  • Unmounting: componentWillUnmount

Functional component hooks provide a more concise and readable way to manage component lifecycle in modern React applications.

________________________________________________________________


ERRORBOUNDARY:

useGet/useFetch or give any name for custom hook creating 
Sure! Let's create clear and concise code for fetching data using a custom hook, with appropriate component names. 

The useFetch function in React is typically a custom hook used for fetching data from an API. It abstracts the data fetching logic, making it reusable and clean. I'll show you how to create a simple useFetch hook using the react-query library.

Step 1: Install React Query

First, you'll need to install react-query if you haven't already:

bash
npm install react-query

Step 2: Create the useFetch Hook

Here's a simple implementation of useFetch using react-query:

### Step 1: Create the Custom Hook
Create a file called `useFetch.js`:

import { useQuery } from 'react-query';

const useFetch = (url) => {
  return useQuery(['fetchData', url], async () => {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  });
};

export default useFetch;

### Step 2: Create the ErrorBoundary Component
Create a file called `ErrorBoundary.js`:

 import React, { Component } from 'react';
class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    console.error("ErrorBoundary caught an error:", error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children;
  }
}

export default ErrorBoundary;

### Step 3: Create the DataFetchingComponent
Create a file called `DataFetchingComponent.js`:

import React from 'react';
import useFetch from './useFetch';

const DataFetchingComponent = () => {
  const { data, error, isLoading } = useFetch('https://api.example.com/data');

  if (isLoading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;

  return (
    <div>
      <h1>Data:</h1>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
};

export default DataFetchingComponent;

### Step 4: Use the ErrorBoundary in the App Component
Create a file called `App.js`:

 import React from 'react';
import ErrorBoundary from './ErrorBoundary';
import DataFetchingComponent from './DataFetchingComponent';

const App = () => {
  return (
    <ErrorBoundary>
      <DataFetchingComponent />
    </ErrorBoundary>
  );
};

export default App;

### Explanation

  1. Custom Hook (useFetch):
  • Fetches data from the given URL.
  • Uses react-query to handle data fetching, caching, and synchronization.
  1. ErrorBoundary Component:
  • Catches errors in its child components.
  • Displays a fallback UI (Something went wrong) if an error occurs.
  1. DataFetchingComponent:
  • Uses the useFetch hook to fetch data.
  • Renders loading state, error state, or the fetched data.
  1. App Component:
  • Wraps DataFetchingComponent with ErrorBoundary to catch and handle any errors that occur during data fetching.

This setup provides a clear and reusable way to handle data fetching with error boundaries in a React application. If you have any more questions or need further assistance, feel free to ask!

Saturday, November 18, 2023

Input component for reuse

 


import React from 'react'
import classes from './Input.module.css'

const Input = (props) => {
  return (
    <div className={classes.input}>
        <label htmlFor={props.input.id}>{props.label}</label>
        <input {...props.input}/>

    </div>
  )
}

export default Input
  1. Passing from below from another component where input requireed <Input
  2. label='Amount'
  3. input={{
  4. id: 'amount',
  5. type: 'number',
  6. min: '1',
  7. max: '5',
  8. step: '1',
  9. defaultValue: '1',
  10. }}
  11. />


in
in