React中获取数据库用户列表时移除当前登录用户的方法
解决方案
首先修正初始状态的错误:你当前把users初始化为空字符串,会导致后续调用map方法时报错,应该初始化为空数组:
const [users, setUsers] = useState([]);
假设你已经获取到当前登录用户的ID(比如存在currentUserId变量中,可从localStorage、React上下文或状态管理工具中获取),以下是几种实现方式:
方式一:获取数据时直接过滤(推荐)
在接口返回数据后,先过滤掉当前登录用户再存入状态,后续渲染无需额外处理:
useEffect(() => { axios.get(`http://localhost:3000/api/v1/user/bulk?filter=${filter}`) .then(response => { // 过滤掉当前登录用户 const filteredUsers = response.data.user.filter(user => user._id !== currentUserId); setUsers(filteredUsers); }) }, [filter, currentUserId]); // 记得把currentUserId加入依赖数组
方式二:渲染时过滤(适合需保留完整用户列表的场景)
如果需要在其他逻辑中用到完整的用户列表,可以在渲染阶段做过滤:
{users .filter(user => user._id !== currentUserId) .map(user => <User key={user._id} user={user} />) }
用三元运算符实现(仅满足需求,不推荐)
如果一定要用三元运算符,可以在map内部判断,不符合条件则返回null:
{users.map(user => user._id !== currentUserId ? <User key={user._id} user={user} /> : null )}
注意:确保
currentUserId的取值正确,且与用户列表中user._id的类型一致(比如同为字符串或数字),否则过滤逻辑会失效。
内容的提问来源于stack exchange,提问作者Yash Varma
相关产品推荐
相关产品推荐

