Search code examples
javascriptreactjsreact-props

passing function as a prop


I have recently started a project and now I am trying to pass an onClick function as a prop of a Menubar so when I click on the image in Taskbar it displays the Menubar content

import React from 'react'
import "./MenuBar.css" 
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

 function MenuBar() {
    
  const [open, setOpen] = React.useState(true);
  const [close, setClose]= React.useState(false)

const TaskBar=()=>{
  const [open, setOpen] = React.useState(true);

   
  
  const handleOpen = () => {
    setOpen(true);
  };

  
  const handleClose = () => {
    setOpen(false);
  };

  



return (   
 
     <div className="taskbar">

            <img onPress={() => handleOpen(true)}  className="menu" 
            <MenuBar onPress={() => handleClose(false)}/>

Solution

  • I think you want to pass the function, handleOpen, not the result of executing the function, handleOpen(). Does this work?

    <img onClick={handleOpen} className="menu" />

    Update

    Based on your edited code, I think this is what you are trying to do:

    import React from 'react'
    import "./MenuBar.css" 
    import { BrowserRouter as Router, Route, Link } from "react-router-dom";
    
    function MenuBar(props) {
      return <div className='my-menu-bar-content'>
        <span>MENU</span>
        <p>This is some sample menu content.</p>
        <button onClick={props.closeMenu}>Close</button>
      </div>
    }
    
    function TaskBar(props){
      const [isMenuOpen, setIsMenuOpen] = React.useState(false);
      
      function openMenu(){
        setIsMenuOpen(true)
      }
      function closeMenu(){
        setIsMenuOpen(false)
      }
      return (   
        <div className="taskbar">
          <img onClick={openMenu} className="menu" />
          {isMenuOpen ? <MenuBar closeMenu={closeMenu} />: null}
        </div>
      )
    }