如何使用 jsx 在 reactjs 1.0 中渲染对象数组?

How to render array of objects in reactjs 1.0 with jsx?

我有以下内容:

var repos = [{"keya":"vala","keyb":"valb"},{"keya":"vala","keyb":"valb"},{"keya":"vala","keyb":"valb"}]

在我的反应组件代码中:

var React = require('react');

var Repos = React.createClass({
    propTypes: {
        username: React.PropTypes.string.isRequired,
        repos: React.PropTypes.array.isRequired
    },
    render: function() {
        return (
            <div> REPOS<br />
                Username: {this.props.username} <br />
                Repos: {this.props.repos}           
            </div>
        )
    }
});

module.exports = Repos;

我看到了: {this.props.repos} returns 以上,但我得到一个错误:

Uncaught Error: Invariant Violation: Objects are not valid as a React child... check the render method.

我该如何解决这个问题?有没有一种方法可以在没有 iterating/looping 的情况下输出所有内容?我知道我可以在 AngularJS 中这样做,但我不明白为什么 React 给我带来了困难。

我使用的是最新版本的react;我不认为这是 0.13 的问题。

将其字符串化:

{JSON.stringify(this.props.repos)}  

这取决于您希望如何显示 HTML 中的值。

你可以做类似

render: function() {
    return (
        <div> REPOS<br />
            Username: {this.props.username} <br />
            Repos:
            {this.props.repos.map(function(repo){
              return <div><span>{repo.keya}</span></div>;
            }}           
        </div>
    )
}

通常,您想要遍历值数组和 return 它的 HTML 表示。这就是为什么你会收到你提到的错误,React 不提供对象的默认 HTML 表示,因此它无法知道如何显示你的数组。

如果您只想将其显示为文本,那么另一个答案中的 stringify 方法是可行的方法。但是,如果您期望格式良好的输出,则必须遍历数组。