从DynamoDB DocumentClient绑定到ReactJS状态的回调

时间:2016-07-09 20:37:26

标签: javascript reactjs callback amazon-dynamodb

我正试图将退回的对象传递出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>
  );
 }
};

1 个答案:

答案 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>
    );
  }
}