我正试图将退回的对象传递出AWS' DynamoDB Document Client模块用于设置反应状态。
我的问题,我无法将数据从方法中拉出来(我之前尝试使用回调失败)并且不能(显然)在方法内部使用setState。
我查看了大量的文档,可以从内联对象中操作状态(它作为docClient的对象返回)但是这个文档并不好玩。
以下是我的基本起点,作为占位符返回,但我需要一个例子,因为我很简单。
我很感激这里的任何帮助和/或警告。谢谢大家。
export default class AwsReadFunction extends React.Component {
constructor(){
super();
this.state={
elss: "chicken"
};
}
render(){
var docClient = new AWS.DynamoDB.DocumentClient()
var table = "Movies";
var year = 1944;
var title = "Lifeboat";
var params = {
TableName: table,
Key:{
"year": year,
"title": title
}
};
var goog = docClient.get(params,
function(err, data){
// I think this is where I need help with scope and callback
return data.Item.title;
}
);
setTimeout(() => {
this.setState({
elss: goog
});
}, 2000)
return (
<div>
{this.state.elss}
<List />
</div>
);
}
};
答案 0 :(得分:0)
您不应该在render()
中执行异步操作或任何修改状态的操作。这是因为只要状态发生变化就会调用render()
,如果你在render()
中更改状态,最终可能会出现无限循环。一个更好的地方是componentDidMount()
。
此外,您应该将回调中的状态设置为docClient.get()
,因为只有在调用该状态时您才能访问下载的数据。
试试这个:
export default class AwsReadFunction extends React.Component {
constructor(){
super();
this.state={ elss: "chicken" };
}
componentDidMount() {
var docClient = new AWS.DynamoDB.DocumentClient()
var table = "Movies";
var year = 1944;
var title = "Lifeboat";
var params = {
TableName: table,
Key:{
"year": year,
"title": title
}
};
var goog = docClient.get(params, (err, data) => {
// TODO: handle `err`
this.setState({ elss : data.Item.title });
});
}
render(){
return (
<div>
{this.state.elss}
<List />
</div>
);
}
}