Skip to content

Instantly share code, notes, and snippets.

@jcunanan05
Created June 22, 2019 11:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jcunanan05/8c41d577a184b2c11e2ef1f6a77f0b15 to your computer and use it in GitHub Desktop.
Save jcunanan05/8c41d577a184b2c11e2ef1f6a77f0b15 to your computer and use it in GitHub Desktop.
react example for render prop
/**
*
* @param {*} menuEnd - navbar right side.
* @param {*} renderDrawer({ isOpen, closeDrawer }) - render prop drawer component
* @param {object} classes - styles injected
*/
class Navbar extends Component {
state = {
isDrawerOpen: false,
};
handleBurgerClick = () => {
this.setState(currentState => ({
isDrawerOpen: !currentState.isDrawerOpen,
}));
};
closeDrawer = () => {
this.setState({ isDrawerOpen: false });
};
render() {
const { props, state } = this;
const renderDrawer = !props.renderDrawer
? null
: props.renderDrawer({
isOpen: state.isDrawerOpen,
closeDrawer: this.closeDrawer,
});
return (
<>
<AppBar position="static" color="inherit">
{/*some appbar code*/}
</AppBar>
{renderDrawer}
</>
);
}
}
// using render props
const NavbarWithDrawer = () => (
<Navbar
menuEnd={<h1>Hello</h1>}
renderDrawer={({ isOpen, closeDrawer }) => (
<NavbarDrawer isOpen={isOpen} onClose={closeDrawer}>
{'Hello Drawer'}
</NavbarDrawer>
)}
/>
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment