Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Render Props vs HOC?

I'm trying to learn React from scratch and having a deep knowledge of concepts !

Today I was searching about HOC, Render Props and the differences between the two. I've checked render times for both. I wrote a console.log('rendered') into render to check render times in browser console.

HOC: When I used HOC to write an usable component, I saw after each changes on props I've render for HOC and component that used HOC.

Render Prop: In this case I've changed the props, but only wrapper component has rendered. because with render props we load only one component and inject codes to use that component feature !

So, Is it a benefit to use Render Props instead HOC components? Or HOC components are usable and powerful yet?

Thanks

like image 813
Mohammad Avatar asked Nov 14 '19 11:11

Mohammad


People also ask

Which is better hoc or render props?

For the most part, HOC and render prop components solve the same problem. However, render prop components provide are gaining popularity because they are more declarative and flexible than an HOC. Read more: Use a render prop.

What is a render prop?

The term “render prop” refers to a technique for sharing code between React components using a prop whose value is a function. In simple words, render props are simply props of a component where you can pass functions. These functions need to return elements, which will be used in rendering the components.

Do hooks replace render props and higher-order components HOC )?

Both render props and higher-order components render only a single child but in most of the cases Hooks are a simpler way to serve this by reducing nesting in your tree.

What does the render () This props do?

The Render Props is a technique in ReactJS for sharing code between React components using a prop whose value is a function. Child component takes render props as a function and calls it instead of implementing its own render logic.


1 Answers

HOC, Render Props and now hooks all serve to the same purpose: Share stateful logic between components. There is actually no way to tell which one is better or worst. All depends on your use case.


High Order Components are composable. It's easy to nest them

const withProps = (Component) => connect(mapState, mapDispatch)(<Component foo='bar' />)

Children as a function is a bad pattern for composability, nesting looks a lot like a callback hell cause they need to be executed inside an jsx block

const Component = () =>{
    return(
         <Consumer>
             {
               props =>(
                   <ThemeConsumer>
                       {
                           theme => <Child {...props} {...theme} />
                       }
                   </ThemeConsumer>              
               )                  
              }
         </Consumer>
     )
}

On the other hand, render props it's easy to set up, have less boilerplate and in most cases are easier to reason about.


Hooks bring the best of both worlds

hooks are composable, can be easily nested, and are simple to reason about cause after all they're just plain old functions

const useConfig = () =>{
    const customProps = useCustomProps()
    const theme = useContext(ThemeContext)

    return [customProps, theme]
}

const Component = () =>{
    const [props, theme] = useConfig() 
}

But again: There is no such thing as the best pattern. It's just a matter of where are you going to use it.

like image 124
Dupocas Avatar answered Oct 08 '22 22:10

Dupocas