我有以下代码:
import ReactDom from 'react-dom';
import React from 'react';
import {render} from 'react-dom';
import $ from 'jquery';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
data: '',
loading: true
}
}
componentDidMount () {
const newsfeedURL = 'https://s3-eu-west-1.amazonaws.com/streetlife-coding-challenge/newsfeed.json';
$.get(newsfeedURL, function(result) {
this.setState({
data: JSON.parse(result),
loading: false
});
console.log(typeof this.state.data.messages);
}.bind(this));
}
render () {
let content;
if (this.state.loading === false && this.state.data.messages) {
content = Object.keys(this.state.data.messages).map(key => {
return <div key={key}>Key: {key}, Value: {this.state.data.messages[key]}</div>;
})
} else {
content = ''; // whatever you want it to be while waiting for data
}
return (
<div>
{content}
</div>
)
}
}
ReactDom.render(
<App />,
document.getElementById('app')
);
但是我收到以下错误:
未捕获的不变违规:对象作为React子项无效(找到:具有键的对象{body,attachments,videos,topics,updated_at,id,subject,downvotes,author,posting_at,comments,user_vote,upvotes ,status,tags,locations,track_impact,user_is_following,comments_count})。如果您要渲染子集合,请使用数组,或使用React附加组件中的createFragment(object)包装对象。检查App
的渲染方法。
我看了一下这个答案,但在我的案例中没有用:Invariant Violation: Objects are not valid as a React child
答案 0 :(得分:4)
在您的div中,您正在尝试渲染select SUM (orders.totalproduct+orders.TOTALTAX+orders.totalshipping- orders.totaladjustment) as amount1 from orders
having SUM (orders.totalproduct+orders.TOTALTAX+orders.totalshipping-orders.totaladjustment)>10000
这是一个对象。您无法使用React的JSX直接渲染对象。然而,您可以呈现的是此对象中保存的一些实际原始数据类型(例如字符串,数字),例如Value: {this.state.data.messages[key]}
将呈现保持在对象的Value: {this.state.data.messages[key].body}
属性处的字符串值。这是一个演示:http://codepen.io/PiotrBerebecki/pen/bwowxP
body
答案 1 :(得分:0)
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
data: '',
loading: true
}
}
componentDidMount () {
const newsfeedURL = 'https://s3-eu-west-1.amazonaws.com/streetlife-coding-challenge/newsfeed.json';
$.get(newsfeedURL, function(result) {
this.setState({
data: result,
loading: false
});
}.bind(this));
}
render () {
let content;
if (this.state.loading === false && this.state.data.messages) {
content = this.state.data.messages.map((ele,key) => {
return <div key={key}>id: {this.state.data.messages[key].id}</div>;
})
} else {
content = ''; // whatever you want it to be while waiting for data
}
return (
<div>
{content}
</div>
)
}
}
ReactDOM.render(
<App />,
document.getElementById('app')
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>