【问题标题】:Map over data returned from aws-sdk on React在 React 上映射从 aws-sdk 返回的数据
【发布时间】:2019-08-20 12:49:36
【问题描述】:

我正在将 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 语句中那样映射返回的数据。任何帮助将不胜感激!

【问题讨论】:

    标签: javascript arrays reactjs aws-sdk aws-amplify


    【解决方案1】:

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

      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>
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多