ReactCompositeComponent.render():必须返回一个有效的 ReactComponent。您可能返回了未定义、数组或其他一些无效对象
ReactCompositeComponent.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object
我在控制台中收到上述错误,即使我正确地返回了要渲染的组件。
以下代码中errorTexts = ["email is invalid"]
的值
if(@state.errorTexts.length>0)
dangerouslySetInnerHTML: {
__html: ReactDOMServer.renderToString(
React.createElement AdminError, errorTexts: @state.errorTexts
)
}
AdminError 组件包含以下代码:
#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 循环中:
更新:
修改 AdminError 组件中的代码以修复此
#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
React 只接受一个父元素return从渲染中编辑。从代码看来,您 return 正在使用多个。试试这个:
// your code ...
return (
<div>
{results}
</div>
)
我不太确定在 coffee 脚本中会是什么,但基本思想是您需要将 return 包装在单个父元素中。
render
方法不能return多个元素,它必须return只有一个。所以将列表包装在另一个 DOM 元素中:
render: ->
dom.div null,
for errorText in @props.errorTexts
dom.div
className: 'help-block'
errorText
我在控制台中收到上述错误,即使我正确地返回了要渲染的组件。
以下代码中errorTexts = ["email is invalid"]
的值
if(@state.errorTexts.length>0)
dangerouslySetInnerHTML: {
__html: ReactDOMServer.renderToString(
React.createElement AdminError, errorTexts: @state.errorTexts
)
}
AdminError 组件包含以下代码:
#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 循环中:
更新:
修改 AdminError 组件中的代码以修复此
#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
React 只接受一个父元素return从渲染中编辑。从代码看来,您 return 正在使用多个。试试这个:
// your code ...
return (
<div>
{results}
</div>
)
我不太确定在 coffee 脚本中会是什么,但基本思想是您需要将 return 包装在单个父元素中。
render
方法不能return多个元素,它必须return只有一个。所以将列表包装在另一个 DOM 元素中:
render: ->
dom.div null,
for errorText in @props.errorTexts
dom.div
className: 'help-block'
errorText