Trying to add to React State Array using spread or push, Error: TypeError: array is not iterable
Trying to add to React State Array using spread or push, Error: TypeError: array is not iterable
我在初始状态对象中创建了一个数组,我试图在选中复选框时将项目添加到数组,并在未选中时删除项目。
我使用的功能非常简单,我看不出有什么理由不能使用它。我正在使用 setState 来传播数组中的项目并在末尾添加新项目,但我在浏览器上不断收到 TypeError 提示该数组不可迭代。我试过使用 typeof
来查看它是否是一个数组,结果是 undefined
.
Click here to see the error I receive
我的代码是:
class Step3 extends React.Component {
constructor() {
super()
this.state = {
missingList: [],
}
}
handleChangeArray = e => {
this.setState({
missingList: [...this.state.missingList, e.target.name]
})
console.log(this.state.missingList)
}
render() {
const { currentProductType, ProductSubtype } = this.props
return (
<div className="row mt-4">
<h4 className='subtitle'>Missing List</h4>
{
systemData[`${currentProductType}`][`${ProductSubtype}`].parts.map((item, _id) =>
<CustomCheckbox
col={3}
key={_id}
name={item}
text={item}
onChange={this.handleChangeArray}
/>
)
}
</div>
)
}
}
systemData 指向一个嵌套对象,列表来自该对象并使用 map
方法呈现复选框
嗯,这是因为 handleChange
未绑定到 Step3
class。
因此,当 CustomCheckBox
调用 handleChange
时,this
的上下文将引用 CustomCheckBox
而不是 Step3
。所以,this.missingList
是正确的 undefined
。简直就是this
.
的范围
检查您的用例的这个最小复制器。评论 bind
行将导致您发布的错误。
https://codesandbox.io/embed/upbeat-smoke-q0iei?fontsize=14&hidenavigation=1&theme=dark
我在初始状态对象中创建了一个数组,我试图在选中复选框时将项目添加到数组,并在未选中时删除项目。
我使用的功能非常简单,我看不出有什么理由不能使用它。我正在使用 setState 来传播数组中的项目并在末尾添加新项目,但我在浏览器上不断收到 TypeError 提示该数组不可迭代。我试过使用 typeof
来查看它是否是一个数组,结果是 undefined
.
Click here to see the error I receive
我的代码是:
class Step3 extends React.Component {
constructor() {
super()
this.state = {
missingList: [],
}
}
handleChangeArray = e => {
this.setState({
missingList: [...this.state.missingList, e.target.name]
})
console.log(this.state.missingList)
}
render() {
const { currentProductType, ProductSubtype } = this.props
return (
<div className="row mt-4">
<h4 className='subtitle'>Missing List</h4>
{
systemData[`${currentProductType}`][`${ProductSubtype}`].parts.map((item, _id) =>
<CustomCheckbox
col={3}
key={_id}
name={item}
text={item}
onChange={this.handleChangeArray}
/>
)
}
</div>
)
}
}
systemData 指向一个嵌套对象,列表来自该对象并使用 map
方法呈现复选框
嗯,这是因为 handleChange
未绑定到 Step3
class。
因此,当 CustomCheckBox
调用 handleChange
时,this
的上下文将引用 CustomCheckBox
而不是 Step3
。所以,this.missingList
是正确的 undefined
。简直就是this
.
检查您的用例的这个最小复制器。评论 bind
行将导致您发布的错误。
https://codesandbox.io/embed/upbeat-smoke-q0iei?fontsize=14&hidenavigation=1&theme=dark