Javascript 未捕获错误:元素类型无效:应为字符串(用于内置组件)或类/函数。。。单击“添加”按钮后
我正在尝试运行React应用程序,它已成功编译(带有警告),但在我尝试单击按钮时收到此错误消息 这是我的App.js:Javascript 未捕获错误:元素类型无效:应为字符串(用于内置组件)或类/函数。。。单击“添加”按钮后,javascript,reactjs,Javascript,Reactjs,我正在尝试运行React应用程序,它已成功编译(带有警告),但在我尝试单击按钮时收到此错误消息 这是我的App.js: import React from "react"; import { Component } from "react"; import { Button } from "react-bootstrap"; import Gift from "./Gift.js"; export default class App extends Component { construc
import React from "react";
import { Component } from "react";
import { Button } from "react-bootstrap";
import Gift from "./Gift.js";
export default class App extends Component {
constructor() {
super();
this.state = { gifts: [] };
}
addGift = () => {
const { gifts } = this.state;
const ids = this.state.gifts.map(gift => gift.id);
const max_id = ids.length > 0 ? Math.max(ids) : 0;
gifts.push({ id: max_id + 1 });
this.setState({ gifts });
};
removeGift = id => {
const gifts = this.state.gifts.filter(gift => gift.id !== id);
this.setState = { ...gifts };
};
render() {
return (
<div>
<h2>Gift Giver</h2>
<div className="gift-list">
{this.state.gifts.map(gift => {
return (
<Gift key={gift.id} gift={gift} removeGift={this.removeGift} />
);
})}
</div>
<Button className="btn-add" onClick={this.addGift}>
Add Gift
</Button>
</div>
);
}
}
从“React”导入React;
从“react”导入{Component};
从“react bootstrap”导入{Button};
从“/Gift.js”导入礼物;
导出默认类应用程序扩展组件{
构造函数(){
超级();
this.state={gives:[]};
}
addGift=()=>{
const{gives}=this.state;
const id=this.state.gives.map(gift=>gift.id);
const max_id=ids.length>0?Math.max(ids):0;
礼品推送({id:max_id+1});
这个.setState({gives});
};
removeGift=id=>{
const gives=this.state.gives.filter(gift=>gift.id!==id);
this.setState={…礼品};
};
render(){
返回(
送礼者
{this.state.gives.map(gift=>{
返回(
);
})}
添加礼物
);
}
}
我正在导入的组件:
import React from "react";
import { Component } from "react";
import {
Form,
FormGroup,
FormControl,
ControlLabel,
Button
} from "react-bootstrap";
export default class Gift extends Component {
constructor() {
super();
this.state = { person: "", present: "" };
}
render() {
return (
<div>
<Form>
<FormGroup>
<ControlLabel>Person</ControlLabel>
<FormControl
onChange={event => this.setState({ person: event.target.value })}
className="input-person"
/>
<ControlLabel>Present</ControlLabel>
<FormControl
onChange={event => this.setState({ present: event.target.value })}
className="input-present"
/>
</FormGroup>
</Form>
<Button
className="btn-remove"
onClick={() => this.props.removeGift(this.props.gift.id)}
>
Remove Gift
</Button>
</div>
);
}
}
从“React”导入React;
从“react”导入{Component};
进口{
形式,
FormGroup,
FormControl,
控制标签,
按钮
}从“反应引导”;
导出默认类组件{
构造函数(){
超级();
this.state={person:,present:};
}
render(){
返回(
人
this.setState({person:event.target.value})
className=“输入人”
/>
目前
this.setState({present:event.target.value})
className=“当前输入”
/>
this.props.removeGift(this.props.gift.id)}
>
撤礼
);
}
}
我得到这个警告
跟踪:节点类型SpreadProperty已重命名为SpreadElement
在Object.isSpreadProperty(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node_modules@babel\types\lib\validators\generated\index.js:4512:11)
在hasSpread(C:\Users\forahumperson\Desktop\react\tdd\react quick start\node\u modules\babel plugin transform object rest spread\lib\index.js:38:13)
在PluginPass.ObjectExpression(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node\u modules\babel plugin transform object rest spread\lib\index.js:234:14)
在newFn(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node_modules@babel\traverse\lib\visitors.js:179:21)
在NodePath.\u调用(C:\Users\ForAHumanPerson\Desktop\react\u tdd\react quick start\node_modules@babel\traverse\lib\path\context.js:55:20)
在NodePath.call(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node_modules@babel\traverse\lib\path\context.js:42:17)
在NodePath.visit(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node_modules@babel\traverse\lib\path\context.js:90:31)
在TraversalContext.visitQueue(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node_modules@babel\traverse\lib\context.js:112:16)
在TraversalContext.Visitingle(C:\Users\ForHumanPerson\Desktop\react\U tdd\react quick start\node_modules@babel\traverse\lib\context.js:84:19)
在TraversalContext.visit(C:\Users\forahumperson\Desktop\react\u tdd\react quick start\node_modules@babel\traverse\lib\context.js:140:19)
并且在使用Jest进行测试时,也会收到与未捕获错误类似的警告。此行的问题:
removeGift = id => {
const gifts = this.state.gifts.filter(gift => gift.id !== id);
this.setState = { ...gifts }; <---------------
};
这里不需要进行扩散操作(…),因为gifts已经是一个数组 您的this.setState错误。请将this.setState={…gives}=>更改为this.setState({gives});除了无效的setState调用,
gives.push({id:max_id+1})代码>变异状态。而是像这样创建一个新变量contnewgifts=[…gifts,{id:max\u id+1}]
。然后setState({gifts:newGifts})
@Brianthonpson指出,但这不是导致上述错误的原因是的,这可能是个问题,但不是导致此错误的问题。
this.setState({gifts});