在 React 上映射从 aws-sdk 返回的数据
Map over data returned from aws-sdk on React
我正在为一个应用程序使用 AWS Amplify,但它缺乏管理用户的能力,所以我在短期内使用 aws-sdk,直到他们添加该功能。
我已经能够使用以下代码return从承诺中获取数据:
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;
我注意到的一件事是它似乎没有设置状态。很确定那是因为我做错了。我需要做的是能够映射 returned 的数据,就像在 return 语句中所做的那样。任何帮助将不胜感激!
在这种情况下,似乎没有必要创建您自己的 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)
}
});
}, []);
但主要问题似乎来自您 return 的 JSX,因为它不能是节点数组。
在你的情况下,你应该 return 一个 ul
标签并且 map
你的用户在其中喜欢以下内容(不要忘记给他们一个独特的 key
) :
return (
<ul>
{users.map(user => <li key={user.given_name}>{user.given_name}</li>)}
</ul>
)
我正在为一个应用程序使用 AWS Amplify,但它缺乏管理用户的能力,所以我在短期内使用 aws-sdk,直到他们添加该功能。
我已经能够使用以下代码return从承诺中获取数据:
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;
我注意到的一件事是它似乎没有设置状态。很确定那是因为我做错了。我需要做的是能够映射 returned 的数据,就像在 return 语句中所做的那样。任何帮助将不胜感激!
在这种情况下,似乎没有必要创建您自己的 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)
}
});
}, []);
但主要问题似乎来自您 return 的 JSX,因为它不能是节点数组。
在你的情况下,你应该 return 一个 ul
标签并且 map
你的用户在其中喜欢以下内容(不要忘记给他们一个独特的 key
) :
return (
<ul>
{users.map(user => <li key={user.given_name}>{user.given_name}</li>)}
</ul>
)