DEV Community

Discussion on: Hoverable Component with Render Props

Collapse
 
ruiclarateixeira profile image
Rui Teixeira • Edited

Thanks for the tips!

For the ts children definition - what would it look like? The code below still complains that children is not a function. CodeSandbox

interface HoverableProps {
  children(hovered: boolean): React.ReactNode;
}

class Hoverable extends React.Component<HoverableProps> {
  state = { hovered: false };
  render() {
    return (
      <div
        onMouseEnter={() => this.setState({ hovered: true })}
        onMouseLeave={() => this.setState({ hovered: false })}
      >
        {this.props.children(this.state.hovered)}
      </div>
    );
  }
}
Collapse
 
ruiclarateixeira profile image
Rui Teixeira

Actually once I updated the usage to use children there's no longer errors.

    <Hoverable>{hovered => <div>{hovered ? "🔥" : "🦄"}</div>}</Hoverable>

That's awesome! thanks!

Thread Thread
 
patroza profile image
Patrick Roza

Sure, no worries.
I think the more correct would be:
children: (hovered: boolean) => void

As this implies a property with function signature instead of a method.

Thread Thread
 
ruiclarateixeira profile image
Rui Teixeira

What is the difference between having it as a method or a property with function signature?