2016-03-14 66 views
1

即使我正确地返回要呈现的组件,但在控制台中出现上述错误。在下面的代码ReactCompositeComponent.render():必须返回有效的ReactComponent。您可能已经返回了未定义的数组或其他无效的对象

if(@state.errorTexts.length>0) 
      dangerouslySetInnerHTML: { 
       __html: ReactDOMServer.renderToString(
       React.createElement AdminError, errorTexts: @state.errorTexts 
      ) 
      } 

而AdminError部件 价值errorTexts = ["email is invalid"]包含以下代码段:

#app/assets/javascripts/components/adminerror.js.coffee 
@AdminError = React.createClass 

    getDefaultProps: -> 
    errorTexts: [] 

    render: -> 
    for errorText in @props.errorTexts 
     dom.div 
     className: 'help-block' 
     errorText 

的JS等效此组件之中的:

(function() { 
    this.AdminError = React.createClass({ 
    getDefaultProps: function() { 
     return { 
     errorTexts: [] 
     }; 
    }, 
    render: function() { 
     var errorText, i, len, ref, results; 
     ref = this.props.errorTexts; 
     results = []; 
     for (i = 0, len = ref.length; i < len; i++) { 
     errorText = ref[i]; 
     results.push(dom.div({ 
      className: 'help-block' 
     }, errorText)); 
     } 
     return results; 
    } 
    }); 

}).call(this); 

值从AdminError组件返回的结果显示在下面的屏幕截图中,但是,我不确定返回的对象的类型是上可接受的或不因为它是内部的for循环: enter image description here

UPDATE: 修改了代码中AdminError组件来解决这个error

#app/assets/javascripts/components/adminerror.js.coffee 
@AdminError = React.createClass 

    getDefaultProps: -> 
    errorTexts: [] 

    render: -> 
    dangerouslySetInnerHTML: { 
     __html: marked((
     dom.div null, 
      for errorText, index in @props.errorTexts 
      dom.div 
       key: index 
       className: 'help-block' 
       errorText 

    ).toString()) 
    } 

并再次得到这个错误:

Uncaught Invariant Violation: ReactCompositeComponent.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.invariant 

回答

1

render方法不能返回多个元素,它只能返回一个。因此,将该列表包装在另一个DOM元素中:

render: -> 
    dom.div null, 
    for errorText in @props.errorTexts 
     dom.div 
     className: 'help-block' 
     errorText 
+0

工作正常,但现在在父组件中还有其他一些工作, ( – vipin8169

+0

)我刚刚修复了这两个错误,现在他们再次出现了。警告:输入是一个无效的元素标记,不得有子元素或使用props.dangerouslySetInnerHTML.warning' '未捕获的不变违规:对象无效作为一个React子元素(发现:包含键的对象{dangerouslySetInnerHTML})。如果你想渲染一个子集合,可以使用一个数组,或者使用React附加组件中的createFragment(object)来包装对象。 – vipin8169

2

React只接受从渲染返回的一个父元素。从代码看,你看起来像返回几个。试试这个:

// your code ... 
return (
    <div> 
    {results} 
    </div> 
) 

我真的不知道是什么将是咖啡的脚本,但其基本思想是,你需要用你在一个单一的父元素的回报。

+0

即使我不确定如何在咖啡中做到这一点,让我试试! – vipin8169

+0

我刚刚修复了这两个错误,现在又重新出现了。 '警告:输入是一个无效的元素标记,不得有子元素或使用props.dangerouslySetInnerHTML.warning' '未捕获的不变的违规:对象作为React子元素无效(找到:具有键{dangerouslySetInnerHTML}的对象)。如果您打算渲染一组子对象,请改为使用数组,或者使用React附加组件中的createFragment(object)来包装对象。' – vipin8169

相关问题