ruby-hyperloop / hyper-react

The project has moved to Hyperstack!!
https://hyperstack.org/
MIT License
285 stars 14 forks source link

allow built in tags to be redefined #269

Closed catmando closed 6 years ago

catmando commented 6 years ago

For example Hypermesh needs to add some capability to INPUT tags.

Currently builtin tags are treated as special cases. Instead they should just be components like everything else, so that the render, and and hooks can be redefined.

catmando commented 6 years ago

This can be done without general performance impact (unlike removed solution) as follows:

      # first remove current definitions from React::Component::Tags
      React::Component::Tags.remove_method :DIV
      React::Component::Tags.send(:remove_const, :DIV)
      # now you can freely redefine
      class React::Component::Tags::DIV < Hyperloop::Component
        others :opts
        render do
          # default behavior is
          # present ..tag-name.., params.opts, &children
          # for example to add data-render-time to every div:
          present :div, params.opts, data: {render_time:  Time.now}, &children
        end
      end