reactjs - 反应“this.props”返回未定义
问题描述
我正在学习关于 CodewithMosh 的课程,在课程中我在点击时启动了一个函数,然后这个函数将一个 ID 传递给另一个组件。这将返回未定义。我尝试传递一个不同的值,它工作得非常好。我不明白有什么问题或区别。
class Counters extends Component {
state = {
counters: [
{id: 1, value: 4},
{id: 2, value: 1},
{id: 3, value: 2},
{id: 4, value: 3}
]
};
handleDelete = (counterId) => {
console.log('Event Handler Called', counterId); //Function receiving data
};
render() {
return (
<div className="main">
{ this.state.counters.map(counter =>
<Counter key={counter.id} onDelete={this.handleDelete} value={counter.value}>
<h4>Counter #{counter.id}</h4>
</Counter>)}
</div>
);
}
class Counter extends Component {
state = {
value: this.props.value
}
getBadgeClasses() {
let classes = "badge m-2 badge-";
classes += (this.state.value === 0) ? "warning" : "primary";
return classes;
}
formatCount(){
const {value: count} = this.state;
return count === 0 ? 'Zero' : count;
}
handleIncrement = () => {
this.setState({value: this.state.value + 1});
}
render() {
return (
<div>
{this.props.children}
<span style={this.styles} className={this.getBadgeClasses()}>{this.formatCount()}</span>
<button onClick={this.handleIncrement } className={"btn btn-secondary btn-sm"}>Increment</button>
<button
onClick={() => this.props.onDelete(this.props.id)} //The ID I'm trying to pass.
className={'btn btn-danger btn-sm m-2'}>
Delete
</button>
</div>
);
}
解决方案
您还没有在 Counter 组件中调用构造函数 render 方法,并且还向它传递了 props。做这个;
class Counter extends Component {
constructor(props){
super(props);
this.state = {
value: this.props.value
};
}
getBadgeClasses() {
let classes = "badge m-2 badge-";
classes += (this.state.value === 0) ? "warning" : "primary";
return classes;
}
formatCount(){
const {value: count} = this.state;
return count === 0 ? 'Zero' : count;
}
handleIncrement = () => {
this.setState({value: this.state.value + 1});
}
render() {
return (
<div>
{this.props.children}
<span style={this.styles} className={this.getBadgeClasses()}>{this.formatCount()}</span>
<button onClick={this.handleIncrement } className={"btn btn-secondary btn-sm"}>Increment</button>
<button
onClick={() => this.props.onDelete(this.props.id)} //The ID I'm trying to pass.
className={'btn btn-danger btn-sm m-2'}>
Delete
</button>
</div>
);
}
推荐阅读
- kubernetes - Kubernetes ingress-nginx 不返回 http 响应标头
- python - 我不能 clicked.connect() QFormLayout 上的 QPushButton
- jenkins - MSB 1009:项目文件不存在
- php - 在后台捕获图像并保存在PHP中的文件夹中
- java - 仅在一种环境中出现“使用 LinkedIn 登录”的问题
- c++ - 模板Node类的c ++构造函数
- c# - 在 ASP.NET MVC 中对 Foreach 循环中的项目求和
- python - macOS 中的 pipenv 和 conda
- python-3.x - vs代码无法导入python包但终端可以导入
- javascript - `import`语句的路径可以包含多个`/`吗?