Skip to content

Instantly share code, notes, and snippets.

@s4kh
Created August 13, 2018 03:09
Show Gist options
  • Save s4kh/f168e9502c7d82e836c97687b4d06b47 to your computer and use it in GitHub Desktop.
Save s4kh/f168e9502c7d82e836c97687b4d06b47 to your computer and use it in GitHub Desktop.
import React from 'react'
import ReactDOM from 'react-dom'
import PropTypes from 'prop-types'
// Instead of using a HOC, we can share code using a
// regular component with a render prop!
class Mouse extends React.Component {
static propTypes = {
render: PropTypes.func.isRequired
}
state = { x: 0, y: 0 }
handleMouseMove = (event) => {
this.setState({
x: event.clientX,
y: event.clientY
})
}
render() {
return (
<div style={{ height: '100%' }} onMouseMove={this.handleMouseMove}>
{this.props.render(this.state)}
</div>
)
}
}
const App = React.createClass({
render() {
return (
<div style={{ height: '100%' }}>
<Mouse render={({ x, y }) => (
// The render prop gives us the state we need
// to render whatever we want here.
<h1>The mouse position is ({x}, {y})</h1>
)}/>
</div>
)
}
})
ReactDOM.render(<App/>, document.getElementById('app'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment