Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs TypeError:\u this2.props.value.forEach不是函数_Reactjs_React State - Fatal编程技术网

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)

你能提供父组件传递的prop
value
的值吗?在我看来,prop
value
是一个字符串,而不是数组。它需要是一个数组才能使用
forEach
数组函数,我们需要知道父组件传递的prop
value
,比如@FouadWah阿比提到above@FouadWahabi:我编辑了我的帖子,请告诉我这是否是你想要的。谢谢!如果
value
是数字
32714
确实没有
forEach
forEach
用于数组之类的东西。在某些情况下,它是以数组的形式出现的,所以我想我必须保留这两个属性检查到位?我已经用此信息编辑了我的帖子。谢谢Nojze,在某些情况下,它将以数组形式出现-(我编辑了我的帖子)使用此信息,如果您的解决方案仍然相同,请现在告诉我?我已更新了我的答案,请参阅其中的新声明,这应该可以正常工作!:)谢谢。如果它不是一个数组,我仍然希望使用
,它不是一个数组。嗯,哈哈,好吧,在我的回答中看到我的新编辑,这应该可以工作了?现在取决于你什么时候运行代码
if (this.props.value)