【发布时间】:2022-04-11 03:53:18
【问题描述】:
我的 React 应用从 api 调用中获取员工列表。对于根据名称过滤掉部门的部门组件,我有类似的功能。当我为具有 first_name 和 last_name 属性的员工做类似的事情时。我得到了错误
TypeError: Cannot read property 'toLowerCase' of undefined
但是当我 console.log 响应时,名字就没有问题了。
下面是我使用的 useEffect 钩子
useEffect(() => {
if (props.data !== undefined) {
const results = props.data.filter(
resp =>
resp.first_name.toLowerCase().includes(filter) +
" " +
resp.last_name.toLowerCase().includes(filter)
);
setFilteredResults(results);
}
}, [filter, props.data]);
我将过滤后的结果放入数组中的状态,然后映射到它们上显示
【问题讨论】:
-
那么如果您记录
resp.first_name和resp.last_name的值会发生什么? -
它们返回姓氏和名字。所以这就是为什么我对为什么当我调用 toLowerCase() 时它给出了我的 undefined 感到困惑
-
你应该从过滤函数返回布尔值而不是值
-
你是什么意思?
-
我的意思是看起来你正在用空格连接两个布尔值;这根本不会过滤。过滤器检查数组元素是否匹配条件(即条件为
true),但非空字符串的计算结果始终为true,因此您根本没有过滤。只是执行一些操作并返回相同的列表
标签: javascript reactjs filter use-effect