我的目的是从Google AnalyticsAPI获取数据,并将所有数据显示为列表。我可以成功地从API获取数据。我将数据传递给另一个组件。我可以看到数据是控制台,但当我试图将它们加载到组件中时,我什么都没得到。 我的第一个组件如下所示:
with tf.dependencies([train_step,variable_average_op]):
train_op = tf.no_op('train')
.....
_, loss, steps = sess.run([train_op, loss, global_step],feed_dict...)
我将所有数据传递给下面的组件:
class TabsExample extends Component {
constructor(props) {
super(props);
this.handleLoad = this.authorize.bind(this);
this.handleProfiles = this.handleProfiles.bind(this);
this.arr = [];
this.state = {
info: [],
details: []
}
}
componentDidMount() {
window.addEventListener('load', this.handleLoad);
}
handleAccounts = (response) => {
var details = response.result.items;
console.log(response)
this.setState({
info: details
});
details.map(x => {
gapi.client.analytics.management.webproperties.list(
{ 'accountId': x.id })
.then(this.handleProperties)
.then(null, function (err) {
console.log(err);
})
})
}
handleProperties = (response) => {
// Handles the response from the webproperties list method.
if (response.result.items && response.result.items.length) {
// Get the first Google Analytics account
var firstAccountId = response.result.items[0].accountId;
// Get the first property ID
var firstPropertyId = response.result.items[0].id;
// Query for Views (Profiles).
this.queryProfiles(firstAccountId, firstPropertyId);
//console.log(firstPropertyId)
} else {
console.log('No properties found for this user.');
}
}
queryProfiles = (accountId, propertyId) => {
// Get a list of all Views (Profiles) for the first property
// of the first Account.
gapi.client.analytics.management.profiles.list({
'accountId': accountId,
'webPropertyId': propertyId
})
.then(this.handleProfiles)
.then(null, (err) => {
// Log any errors.
console.log(err);
})
}
handleProfiles(response) {
// Handles the response from the profiles list method.
if (response.result.items && response.result.items.length) {
// Get the first View (Profile) ID.
var firstProfileId = response.result.items[0].id;
// Query the Core Reporting API.
//console.log(firstProfileId);
//this.queryCoreReportingApi(firstProfileId);
gapi.client.analytics.data.ga.get({
'ids': 'ga:' + firstProfileId,
'start-date': '30daysAgo',
'end-date': 'today',
'metrics': 'ga:sessions, ga:bounces, ga:users'
})
.then((response) => {
// this.setState({
// details: [this.state.details, response]
// })
this.arr.push(response)
})
} else {
console.log('No views (profiles) found for this user.');
}
}
queryCoreReportingApi(profileID) {
console.log(profileID);
}
authorize = (event) => {
var useImmidiate = event ? false : true;
var authData = {
client_id: CLIENT_ID,
scope: SCOPES,
immidiate: useImmidiate
};
gapi.auth.authorize(authData, (response) => {
gapi.client.load('analytics', 'v3').then(() => {
//console.log(response);
gapi.client.analytics.management.accounts.list()
.then(this.handleAccounts);
});
});
}
render() {
return (
<Tabs>
<Tab label="Accounts" >
<div>
<NewsList info={this.arr} />
{this.arr}
</div>
</Tab>
<Tab label="Visual Data" >
<div>
<h2 className='tab_headline'>Tab Two</h2>
<div className="row">
<div className="col-md">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Pie_chart_EP_election_2004.svg/1280px-Pie_chart_EP_election_2004.svg.png"
alt="First"
className="img-thumbnail"
style={divHeight} />
</div>
<div className="col-md">
<img src="https://confluence.atlassian.com/fisheye/files/298976800/299139805/3/1484820924815/FishEye_Charts_Page02.png"
alt="First"
className="img-thumbnail"
style={divHeight} />
</div>
</div>
</div>
</Tab>
<Tab
label="User Information"
data-route="/home">
<div>
<h2 className='tab_headline'>Tab Three</h2>
</div>
</Tab>
</Tabs>
)
}
}
当我看到控制台日志时,我可以看到import React, { Component } from 'react';
class newsList extends Component {
items = (props) => {
if(props){
return props.info.map((prop)=>{
return(
<div>{prop.result.id}</div>
)
})
}
}
render() {
return(
<div>
<ul className="collection">
{console.log(this.state.details)}
</ul>
</div>
)
}
}
export default newsList;
。一开始它没有任何数据。有一次,当我再次点击Array [ ]
时,我可以看到它有两个对象。但我不能使用这些对象。我怎么能这样做?
答案 0 :(得分:2)
您当前的实施不会使用React Component
的state
。
目前,您的arr
值只是附加到this
,因此,React无法看到它何时发生变化。
在arr
React component
{{}}}中嵌入state
值,每次使用render()
进行更改时都会触发this.setState()
,从而使您的应用响应迅速改变它的价值。
请参阅下面的实施示例。
初始化:
constructor(props) {
super(props)
this.state: {
arr: []
}
}
更新
this.setState({
arr: response
})
提取:
const arr = this.state.arr