Reactjs TypeError:\u this2.props.value.forEach不是函数
加载以下组件时,我遇到以下错误:Reactjs TypeError:\u this2.props.value.forEach不是函数,reactjs,react-state,Reactjs,React State,加载以下组件时,我遇到以下错误: TypeError: _this2.props.value.forEach is not a function fetchRecords webpack:///./src/main/js/components/forms/AutoCompanies.js?:122 promise callback*fetchRecords webpack:///./src/main/js/components/forms/AutoCompanies.js?:11
TypeError: _this2.props.value.forEach is not a function
fetchRecords webpack:///./src/main/js/components/forms/AutoCompanies.js?:122
promise callback*fetchRecords webpack:///./src/main/js/components/forms/AutoCompanies.js?:115
componentDidMount webpack:///./src/main/js/components/forms/AutoCompanies.js?:149
React 6
unstable_runWithPriority webpack:///./node_modules/scheduler/cjs/scheduler.development.js?:653
React 5
unstable_runWithPriority webpack:///./node_modules/scheduler/cjs/scheduler.development.js?:653
React 6
AutoCompanies.js:143:24
它基本上是在下面的代码中指示这行代码this.props.value.forEach(e=>{
。我想知道为什么会发生这种情况
我偶然看到这篇文章,但无法在我的上下文中理解它
import { Select as CompanySelect } from "react-select-virtualized";
function escapeRegexCharacters(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
const override = css`
display: block;
margin: 0 auto;
border-color: red;
`;
export class AutoCompanies extends Component {
constructor(props) {
super(props);
this.state = {
value: "",
selectedCompanyValues: null,
selectedCompanies: [],
loading: false,
};
this.onChange = this.onChange.bind(this);
this.companyTemplate = this.companyTemplate.bind(this);
this.selectedCompaniesTemplate = this.selectedCompaniesTemplate.bind(this);
}
companyTemplate(option) {
return (
<div className="country-item">
<div>{option.label}</div>
</div>
);
}
selectedCompaniesTemplate(option) {
if (option) {
return (
<div className="country-item country-item-value">
<div>{option.title}</div>
</div>
);
}
return "Select Companies";
}
onChange = (val) => {
this.setState({
value: val,
selectedCompanyValues: val,
});
this.props.onChange(val);
};
fetchRecords() {
const loggedInUser = JSON.parse(sessionStorage.getItem("loggedInUser"));
let url = isAdmin(loggedInUser) ? "url1" : "url2?value=" + loggedInUser.id;
return axios
.get(url)
.then((response) => {
let selectedCompanies = [
{
title: "test",
label: this.props.value[0] && this.props.value[0].title,
},
];
if (this.props.value) {
this.props.value.forEach((e) => {
selectedCompanies.push(
response.data._embedded.companySets.filter((companySet) => {
return companySet.companySetId === e.companySetId;
})[0]
);
});
}
this.setState({
selectedCompanies: response.data._embedded.companySets.map(
(item) => ({
label: item.title,
title: item.title,
companySetId: item.companySetId,
})
),
selectedCompanyValues: selectedCompanies,
});
})
.catch((err) => console.log(err));
}
componentDidMount() {
this.fetchRecords(0);
}
render() {
return (
<div>
<CompanySelect
value={this.state.selectedCompanyValues}
options={this.state.selectedCompanies}
onChange={this.onChange}
optionHeight={60}
/>
</div>
);
}
}
它是这样印刷的:
Object { fieldName: "companySets", value: 32714, onChange: onChange(ev)
}
fieldName: "companySets"
onChange: function onChange(ev)
value: 32714
<prototype>: Object { … }
Object{fieldName:“公司集”,值:32714,onChange:onChange(ev)
}
字段名:“公司网站”
onChange:函数onChange(ev)
价值:32714
:对象{…}
有时,它以数组的形式出现:
Object { fieldName: "companySets", value: (1) […], onChange: onChange(ev)
}
fieldName: "companySets"
onChange: function onChange(ev)
value: Array [ {…} ]
0: Object { companySetId: 32798, sourceSystem: "12", status: "CONSENTED", … }
length: 1
<prototype>: Array []
<prototype>: Object { … }
Object{fieldName:“companySets”,值:(1)[…],onChange:onChange(ev)
}
字段名:“公司网站”
onChange:函数onChange(ev)
值:数组[{…}]
0:对象{companySetId:32798,源系统:“12”,状态:“已同意”,…}
长度:1
:数组[]
:对象{…}
如上所示,值的类型是一个数字(32714)。我不知道您试图在代码中实现什么,但解决此错误的方法是在if语句中包含以下内容:
编辑:
由于当值
类型是数字或数组时,您希望能够为这两种类型运行代码,因此可以执行以下操作:
if (typeof this.props.value === 'number') {
// Enter your code to run when this.props.value is a number
} else if (Array.isArray(this.props.value)) {
// Enter your code to run when this.props.value is an array
}
而不是
if (this.props.value)
你能提供父组件传递的propvalue
的值吗?在我看来,propvalue
是一个字符串,而不是数组。它需要是一个数组才能使用forEach
数组函数,我们需要知道父组件传递的propvalue
,比如@FouadWah阿比提到above@FouadWahabi:我编辑了我的帖子,请告诉我这是否是你想要的。谢谢!如果value
是数字32714
确实没有forEach
。forEach
用于数组之类的东西。在某些情况下,它是以数组的形式出现的,所以我想我必须保留这两个属性检查到位?我已经用此信息编辑了我的帖子。谢谢Nojze,在某些情况下,它将以数组形式出现-(我编辑了我的帖子)使用此信息,如果您的解决方案仍然相同,请现在告诉我?我已更新了我的答案,请参阅其中的新声明,这应该可以正常工作!:)谢谢。如果它不是一个数组,我仍然希望使用值,它不是一个数组。嗯,哈哈,好吧,在我的回答中看到我的新编辑,这应该可以工作了?现在取决于你什么时候运行代码
if (this.props.value)