59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Render Props Component | ||
|  | --- | ||
|  | 
 | ||
|  | ## Render Props Component
 | ||
|  | 
 | ||
|  | Render props is an advanced React pattern, yet so simple! | ||
|  | 
 | ||
|  | ### Example
 | ||
|  | 
 | ||
|  | This is an example on how you can use render prop for a toggle functionality. | ||
|  | 
 | ||
|  | ```jsx | ||
|  | import React, { PureComponent } from "react"; | ||
|  | 
 | ||
|  | class Toggle extends PureComponent { | ||
|  |   state = { | ||
|  |     on: false | ||
|  |   }; | ||
|  | 
 | ||
|  |   toggle = () => { | ||
|  |     this.setState({ | ||
|  |       on: !this.state.on | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   render() { | ||
|  |     const { children } = this.props; | ||
|  |     return children({ | ||
|  |       on: this.state.on, | ||
|  |       toggle: this.toggle | ||
|  |     }); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | export default Toggle; | ||
|  | ``` | ||
|  | 
 | ||
|  | This Toggle component will return it's children `state.on` and the function toggle. Which can be used in it's child components. | ||
|  | 
 | ||
|  | This Toggle can be used as follows: | ||
|  | 
 | ||
|  | ```jsx | ||
|  | <Toggle> | ||
|  |   {({ on, toggle }) => ( | ||
|  |     <Fragment> | ||
|  |       <button onClick={toggle}>Show / Hide</button> | ||
|  |       {on && <h1>I can be toggled on or off!</h1>} | ||
|  |     </Fragment> | ||
|  |   )} | ||
|  | </Toggle> | ||
|  | ``` | ||
|  | 
 | ||
|  | As you can see, the toggle functionality can be used by it's child Button to toggle some content. if on is true the h1-tag will get rendered otherwise not. | ||
|  | 
 | ||
|  | ## Other Resources
 | ||
|  | 
 | ||
|  | * [React docs: Render props](https://reactjs.org/docs/render-props.html) |