Home > database >  Re-render a component in gatsby
Re-render a component in gatsby

Time:01-20

I'm using react and I can't find how to conditional render this example in gatsby. The main goal is re-render the child component every time I changes in value but I don't want to re-render all the website only the Child component

import * as React from "react"
    
    let i=1;
    
    const Test = () => {
      return (
        
        <main>
        <button onClick={()=>{i=i 1;console.log(i) }}>CLICK ON ME</button>    
        <Child></Child>
        </main>  
               
                  
            
      )
    }
    
    export default Test
    
    const Child = () => {
        if(i===1){
            return(
            <div >
                1
                </div>
            )
        }
        if(i===2){
            return(
            <div >
                2
                </div>
            )
        }
        if(i===3){
            return(
            <div >
                3
                </div>
            )
        }
        else{
            return(
            <div >
                4 
                </div>
            )
        }
      
      
    
    
    }

CodePudding user response:

Gatsby is a React-based framework, it uses React under the hood so the component and state management is identical to Reacts.

In your case, try using a useState hook to render the Child, passing the integer as props:

   const Test = () => {
     const [i, setI] = useState(1)

      return (
        <main>
        <button onClick={()=>{setI(i  1);console.log(i) }}>CLICK ON ME</button>    
        <Child i={i} />
        </main>  
      )
    }

In the Child component:

const Child = ({ i }) => {
  return <div>{i}</div>
}

If you want to conditionally render different components depending on i valu, just use:

const Child = ({ i }) => {
  return <>
  {i==1 && <div>Some rendered content when i==1</div>}
  {i==2 && <div>Some rendered content when i==2</div>}
  </>
}

React's state management will only rehydrate (render) the needed parts that have changed accordingly. In this case, because you are changing the i value with the setI function, it will rehydrate the child changing the value lifted using props.

  •  Tags:  
  • Related