javascript - 映射从 React 上的 aws-sdk 返回的数据

标签 javascript arrays reactjs aws-sdk aws-amplify

我正在将 AWS Amplify 用于应用程序,但它缺乏管理用户的能力,因此我会在短期内使用 aws-sdk,直到他们添加该功能。

我已经能够使用以下代码从 Promise 返回数据:

const ListUsers = () => {
  const [users, setUsers] = useState([]);
  useEffect(() => {
    const getUsers = () => {
      var params = {
        UserPoolId: USER_POOL_ID,
        AttributesToGet: ['given_name']
      };

      return new Promise((resolve, reject) => {
        AWS.config.update({
          region: USER_POOL_REGION,
          accessKeyId: AWS_ACCESS_KEY_ID,
          secretAccessKey: AWS_SECRET_KEY
        });
        var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
        cognitoidentityserviceprovider.listUsers(params, (err, data) => {
          if (err) {
            console.log(err);
            reject(err);
          } else {
            resolve(data);
            setUsers(data)
          }
        });
      });
    };
    getUsers();
  }, []);

  return users.map(user => {
    return (
      <ul>
        <li>{user.given_name}</li>
      </ul>
};

export default ListUsers;

我注意到的一件事是它似乎没有设置状态。很确定那是因为我做错了。我需要做的是能够映射返回的数据,就像在 return 语句中所做的那样。任何帮助将不胜感激!

最佳答案

在这种情况下,似乎没有必要创建自己的 Promise,没有它你的钩子(Hook)也能正常工作:

  useEffect(() => {

    var params = {
      UserPoolId: USER_POOL_ID,
      AttributesToGet: ['given_name']
    };

    AWS.config.update({
      region: USER_POOL_REGION,
      accessKeyId: AWS_ACCESS_KEY_ID,
      secretAccessKey: AWS_SECRET_KEY
    });

    var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
    cognitoidentityserviceprovider.listUsers(params, (err, data) => {
      if (err) {
        console.log(err);
      } else {
        setUsers(data)
      }
    });

  }, []);

但主要问题似乎来自您返回的 JSX,因为它不能是节点数组。

就您而言,您应该返回一个 ul 标记并在其中map您的用户,如下所示(不要忘记给他们一个唯一的 key ):

  return (
    <ul>
      {users.map(user => <li key={user.given_name}>{user.given_name}</li>)}
    </ul>
  )

关于javascript - 映射从 React 上的 aws-sdk 返回的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57574094/

相关文章:

javascript - 另一个元素后面的 Canvas 上的事件监听器

javascript - 无法在 jquery 的 div 中显示 ul li 的计数

固定长度的 Javascript Canvas 曲线

c++ - 如何将二维数组(矩阵)传入函数?

javascript - 我无法正确使用 setState 来更改值

javascript - Safari 在我的图像下方显示空白区域?

arrays - 如何使用循环在不使用 .reversed() 的情况下使用与语言相同的项目填充新数组?

c - 在C中打印一维数组

ios - 在 react native 组件类中找不到方法

javascript - Webpack错误: “You may need an appropriate loader to handle this file type”