Skip to main content

custom hooks in react with two example

more about custom hooks

https://reactjs.org/docs/hooks-custom.html

custom hooks like regular react hooks so you can create your own hooks and make them reusable entities.

one note hook name should start with the use keyword.




working link

https://stackblitz.com/edit/react-wk6ueh


import React, { Component,useEffect,useState } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';

//usefetchData hook uses to fetch data from any api 
const usefetchData=(url)=>{
  //check status data is loaded or not
  const  [status,setStatus]=useState(false)
  //set data when its loaded sucessfully
  const  [data,setData]=useState(null);
  useEffect(()=>{
    const getData=async()=>{
      const response=await fetch(url).catch((err)=>{
        console.error("Error in fetching")
      });
      const data=await response.json().catch((err)=>{
         console.error("Invaild json type");
      });
      setData(data);
      setStatus(true);
    }
     getData(url);

  },[ ])

  return [status,data];
}
//deep copy
const useDeepCopy=(fromObject)=>{
  const [deepobject,setdeepobject]=useState({});
  const deepCopy=(deepobject,fromObject)=>{
    for(const [key,value] of Object.entries(fromObject))
    {
          if(typeof value==="object")
          {
            let newObject=new Object();
            deepobject[key]=newObject;
            deepCopy(newObject,fromObject[key]);        
          }else
          {
              deepobject[key]=value;
          }
      
    }
  }
  useEffect(()=>{
    
    deepCopy(deepobject,fromObject);
  },[])
  return deepobject;
}
const obj={
    name:"manish",
    age:22,
    working:
    {
      software:"eng",
      lang:"c++,javascript"
    }
  }



//i am dealing with all custom hooks here
const Counter=()=>{
    
  //deep copy of a object and return a newObject
  const newObject=useDeepCopy(obj)
  
  //fetch data from api
  const [status,data]=usefetchData('https://jsonplaceholder.typicode.com/todos/1');
  

  //deep copy custom hook
  useEffect(()=>{
    obj.name="ranjeet";
    obj.working=null;
    console.log("real",obj);
    console.log("copy",newObject)


  },[newObject])
  return <div>
  
   <div>
    {
      //fetch json custom hook
       (!status)?"loading...":"user id=>"+ data.userId+" "+"user data is=>"+data.title
    }</div>
     
  
      </div>
    
   
}
class App extends Component {
  constructor() {
    super();
    this.state = {
      name: 'React'
    };
  }

  render() {
    return (
      <div>
        <Hello name={this.state.name} />
      <Counter/>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

Comments

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...