React: leave the contents of a component alone

前端 未结 2 729
感情败类
感情败类 2020-12-31 21:45

Is it possible to have React ignore a subtree? i.e., don\'t compare or update it?

My use case is migrating to React. Re-writing all our Handlebars templates at once

相关标签:
2条回答
  • 2020-12-31 22:29

    Have a look at this module. Simple and very effective. https://gist.github.com/alexeisavca/d4ff175fd16c93c8785d

    Here's a coffeescript version of it.

    module.exports = ReactIgnore = React.createClass
      shouldComponentUpdate: ->
        false
      render: ->
        React.Children.only @props.children
    

    And wrap your component in it:

    <ReactIgnore>
      YourComponent
    </ReactIgnore>
    
    0 讨论(0)
  • Yes, if you don't modify a subtree within React then the DOM won't be touched at all. It's easy to wrap non-React functionality like a Handlebars template in React. You can either use dangerouslySetInnerHTML:

    render: function() 
        return <div dangerouslySetInnerHTML={{__html: template(values)}}>;
    }
    

    or you can simply return an empty div and populate (or attach event handlers, etc) it in componentDidMount:

    render: function() 
        return <div />;
    },
    componentDidMount: function() {
        var node = React.findDOMNode(this);
        node.innerHTML = template(values);
    }
    

    In the latter case, React won't touch the DOM after the initial render because render always returns the same thing.

    0 讨论(0)
提交回复
热议问题