React:单独留下组件的内容

时间:2014-01-22 14:12:22

标签: reactjs

是否可以让React忽略子树?即,不比较或更新它?

我的用例是迁移到React。一次重写我们所有的Handlebars模板是不可行的,但是如果我们可以将我们现有的模板用于某些子组件,我们可以慢慢采用它。

2 个答案:

答案 0 :(得分:17)

是的,如果您不修改React中的子树,那么根本不会触及DOM。在React中很容易像Handlebars模板一样包装非React功能。您可以使用dangerouslySetInnerHTML

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

或者您只需返回一个空div并在componentDidMount中填充(或附加事件处理程序等):

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

在后一种情况下,React在初始渲染后不会触及DOM,因为render总是返回相同的东西。

答案 1 :(得分:0)

看看这个模块。简单而有效。 https://gist.github.com/alexeisavca/d4ff175fd16c93c8785d

这是一个coffeescript版本。

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

将您的组件包装在其中:

<ReactIgnore>
  YourComponent
</ReactIgnore>