如何在ReactJS + Redux中检查数组中的每个对象
How to check each object in array in ReactJS + Redux?
我有一个用户对象数组,每个对象都有"用户名"和"密码"。
然后有一个登录页面,一旦用户输入用户名和密码,我想将其传递到化简器中并将它们与"users"数组中的每个对象进行比较,如果找到同时匹配的对象,"密码"和"用户名",我希望它返回"true"。
以下是减速器:
const usersReducer = function(users = [], action){
switch (action.type){
case 'VERIFY_USER':
return users.map((user)=> {
if(user.username === action.username && user.password === action.password){
return true
} else{
return false
}
})
}
default:
return users
}
}
但它似乎一直都是真实的。我使用地图是否正确?如果没有,有没有这样的方法可以遍历数组中的每个对象?任何见解或指导将不胜感激。提前谢谢你!
编辑**从以下位置调用它:
verifyLoginUser(){
event.preventDefault()
if(this.props.actions.verifyUser(this.props.loginUser.username, this.props.loginUser.password)){
console.log('LOGGED IN')
} else {
console.log('NOT LOGGED IN')
}
}
使用以下减速器:
case 'VERIFY_USER':
let isVerified = false;
users.forEach((user)=> {
if(user.username === action.username && user.password === action.password){
isVerified = true;
return false;
}
});
return isVerified;
使用 Array.some
return users.some(user => user.username === action.username && user.password === action.password);
Map 函数将返回一个数组。我建议使用不同的本机数组函数:"find"。要检查用户数组中是否存在用户对象,您可以执行
function findUser(user) {
return (user.username === action.username && user.password === action.password);
}
var isUser = users.find(findUser) ? true : false;
return isUser;
使用布尔变量和forEach来完成你想要的
case 'VERIFY_USER':
let isVerified = false;
users.forEach((user)=> {
if(user.username === action.username && user.password === action.password){
isVerified = true;
return false;
}
});
return isVerified;
为了更进一步,假设您想对此进行迭代并返回正确的用户,以便您可以使用它或其他东西填充当前用户。
case 'VERIFY_USER':
let currentUser = null;
users.forEach((user)=> {
if(user.username === action.username && user.password === action.password){
currentUser = user;
return false;
}
});
return currentUser;
编辑:我们在评论中谈论的内容
假设您请求在某处登录用户。 该功能存在于您的道具上
this.props.loginUser({my params here});
现在你的实际行动。
loginUser = (data) => {
// whatever method you are using to make the request goes here.
someRequestMethod('/login/, data).then( (response) => {
if(response.status === 200){
dispatch(type: USER_LOGIN, payload: response.data); // whatever the user is that comes back from the response. I just put data for an example
}
})
}
现在在您的减速机
const populateState = (user) => {
return {
id: user.id,
username: user.username,
email: user.email,
isAuthenticated: Object.keys(user).length > 0
};
}
let defaultState = {id: null, username: '', email: '', isAuthenticated: false};
const loginReducer = (currentUser = defaultState) => {
switch (action.type){
case 'USER_LOGIN':
return Object.assign({}, currentUser, populateState(action.payload));
return currentUser;
}
最后,在其他任何地方,您都只是寻找当前用户。
if(this.props.currentUser.isAuthenticated){
// do stuff
}
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象