javascript - Javascript - 获取 TypeError 对于数组是不可迭代的
问题描述
我正在使用 react 并且我有一个组件,我在其中设置一个带有字符串数组的常量:
const propsToCheck = ['text', 'type', 'status', 'topic.name', 'class.0.code'];
checkObjectContainsValue
我在从另一个文件导入的函数中将子链一直发送到正在使用它的组件:
constructor(props) {
super(props);
this.state.data = this.transformRows(props.rows.filter(obj => checkObjectContainsValue(obj, props.searchString)(props.propsToCheck)))
}
我的测试失败了,因为我收到一个错误:
TypeError:propsToCheck 不可迭代
但是,我注意到如果我将checkObjectContainsValue
函数导入到我拥有的父组件中,我propsToCheck
不会收到错误消息。但由于其他原因,我不能在那里拥有该功能。我检查了反应开发人员工具,我可以看到我propsToCheck
在子组件中获取了数组,所以我不确定为什么会出现这个错误?
这是功能checkObjectContainsValue
:
const checkObjectContainsValue = (obj, value) => (propsToCheck) => {
for (let prop of propsToCheck) {
const propToCheckValue = prop.split('.').reduce((currentObject,property) => {
return currentObject[property];
}, obj);
if (propToCheckValue.toLowerCase().includes(value.toLowerCase())) {
return true;
}
}
return false;
};
更新
如果我将逻辑移动到父组件,那么一切正常。这是一个例子:
onSearchChange(event) {
const searchString = event.target.value;
this.setState(prevState => {
const filteredTasks = prevState.tasks.filter(obj => checkObjectContainsValue(obj, searchString)(propsToCheck));
return {filteredTasks: filteredTasks};
});
}
为什么只有在子组件中使用此功能时才会出现此错误?
解决方案
您的函数需要三个参数
const checkObjectContainsValue = (obj, value, propsToCheck) => {
当您只是将两个参数传递给函数时
props.rows.filter(obj => checkObjectContainsValue(obj, props.searchString)
所以第三个参数的值等于undefined
不可迭代
推荐阅读
- apache-kafka - 如何使用 Vertx Pump() 将文件流连接到 Kafka 生产者流?
- ckeditor - ckeditor 删除带有列表的内容
- javascript - 这个函数如何反转这个字符串?
- java - JMeter 使用 CSV 数据集填充嵌套的 json 请求正文
- javascript - 正则表达式,仅当整个单词存在而没有单词部分的另一个实例时才取反
- php - 试图将数据作为对象数组取回,但在 php 中获取数组对象数组
- angular - 将外部数据传递给 Angular-CLI 应用程序
- webpack - ASP.NET Core + Webpack - 未捕获的 ReferenceError:使用 DllReferencePlugin 时未定义供应商
- php - 与 PHP 一起使用时,Imagemagick 转换命令返回错误代码 4
- php - plesk 中的 Codeigniter base_url