【发布时间】:2018-08-28 15:13:47
【问题描述】:
我正在使用承诺从 AWS SNS 获取主题列表,并将其记录到控制台。这很好用,但我遇到的问题是如何获取该信息并将其放入列表中,以便我可以在网页上显示它。
这是在控制台中列出主题的代码:
import AWS from 'aws-sdk';
// Load the AWS SDK for Node.js
AWS.config = new AWS.Config();
AWS.config.accessKeyId = "My_Key";
AWS.config.secretAccessKey = "My_Secret_Key";
// Set region
AWS.config.update({ region: 'My_Region' });
// Create promise and SNS service object
const ListTopicsPromise = new AWS.SNS({ apiVersion: '2010-03-31'
}).listTopics({}).promise();
// Handle promise's fulfilled/rejected states
ListTopicsPromise.then(
function (data) {
console.log(data.Topics);
}).catch(
function (err) {
console.error(err, err.stack);
});
我在想我需要以某种方式将它变成一个函数,这样我才能让它返回一个包含列表的 div。我只是不确定该怎么做。您是否需要更多信息,或者您有什么建议?感谢您花时间研究这个问题,而我一直在努力解决这个问题!
编辑:我已经从控制台日志中截取了一张图片,以防万一这会有所帮助。
Console Topic List Snippet 这是来自 App.js 的代码:
import React, { Component } from 'react';
import './App.css';
import AWS from 'aws-sdk';
import awsmobile from './aws-exports';
import ListTopicsPromise from './aws/listTopics';
AWS.config.update({
region: awsmobile.aws_cognito_region,
credentials: new AWS.CognitoIdentityCredentials({
IdentityPoolId: awsmobile.aws_cognito_identity_pool_id
})
});
class App extends Component {
state = {
topics: [],
}
componentDidMount() {
//Fetch data, then using 'setState' set it to topics.
ListTopicsPromise.then(
data =>
this.setState({ topics: data.Topics})
).catch(
err => {
console.error(err, err.stack);
});
}
render() {
return (
<div className="App">
<div>
{
this.state.topics.map( topic =>
<div>
<p>Topic ID: {topic.id}</p>
<p>Topic Title: {topic.title}</p>
</div>
)
}
</div>
</div>
);
}
}
export default App;
该组件是您使用 npx create-react-app my-app 安装 React 应用程序时的默认组件。
【问题讨论】:
-
这取决于您的数据返回的格式,但本质上,您最好的办法是在返回时将该数据置于您的状态:
this.setState({ topics: data.Topics }),然后在您的render函数中,假设它是一个数组,你可以映射它:this.state.topics.map(topic => (<li>topic.name - topic.description</li>)) -
我在数组项中只看到一个
TopicArn属性。就这些吗? -
是的,这是我调用它时从 AWS 返回的唯一属性。每个都有 proto 对象,但没有别的。
-
我不知道应该返回什么,但对于 AWS 部分我无能为力。如果这些数据是您想要的,那么您可以像
topic.TopicArn一样使用它。 -
啊哈,我试图解决这个问题,但我只是打错了。感谢您的所有帮助,开发人员。这解决了一切。
标签: javascript reactjs amazon-web-services aws-sdk jsx