javascript - Reactjs无法打印id

标签 javascript reactjs

我是 ReactJS 新手。我正在尝试构建一种在线购物类型的功能,其中我们可以增加或减少数量。或者使用“删除”按钮直接删除项目。我正在尝试使用 console.log("delete clicked",counterId); 打印所单击的按钮的 id在“counters.jsx”中。但每次它都会给我带来一些不确定的情况。这是我的代码。

计数器.jsx

import React,{Component} from 'react';
import Counter from './counter';

class Counters extends Component {
    state = {
        counters:[
            {id:1,value:4},
            {id:2,value:0},
            {id:3,value:3},
            {id:4,value:0}
        ]
    };

    handleDelete=(counterId)=>{
        console.log("delete clicked",counterId);
    }

    render(){
        return (
            <div>
                {this.state.counters.map(counter=>
                    <Counter key={counter.id} onDelete={this.handleDelete} value={counter.value}/>)}
            </div>
        );
    }
}

export default Counters;

计数器.jsx

import React, { Component} from 'react';

class Counter extends Component{
    state={
        value: this.props.value 
    };

    handleIncrement=()=>{
        this.setState({value:this.state.value+1});
    }

    handleDecrement=()=>{       
        this.setState({value:this.state.value-1});
    }

    render(){
        return (
            <React.Fragment>
                <p>
                <span className={this.getBadgeClasses()}>{this.formatCount()}</span>
                <button onClick={this.handleIncrement} className="btn btn-secondary btn-sm m-1">Increment</button>
                <button onClick={this.handleDecrement} className="btn btn-warning btn-sm m-1">Decrement</button>
                <button onClick={()=>this.props.onDelete(this.props.id)} className="btn btn-danger btn-sm m-1">Delete</button>
                </p>
            </React.Fragment>
        );
    }

    getBadgeClasses(){
        let classes="badge m-2 badge-";
        classes+=this.state.value===0?"warning":"primary";
        return classes;
    }

    formatCount(){
        const {value} = this.state;
        return value===0 ? 'Zero': value;
    }
}

export default Counter;

任何帮助将不胜感激!

最佳答案

读一遍。 https://reactjs.org/docs/lists-and-keys.html#keys-must-only-be-unique-among-siblings

在上面的示例中,Post 组件可以读取 props.id,但不能读取 props.key。

因此,你必须添加 props.id={counter.id}!

计数器.jsx 之前

render(){
    return (
        <div>
            {this.state.counters.map(counter=>
                <Counter key={counter.id} onDelete={this.handleDelete} value={counter.value}/>)}
        </div>
    );
}

之后

render(){
    return (
        <div>
            {this.state.counters.map((counter, index)=>
                <Counter key={index} id={counter.id} onDelete={this.handleDelete} value={counter.value}/>)}
        </div>
    );
}

关于javascript - Reactjs无法打印id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133484/

相关文章:

javascript - 语法错误: Import React from 'react' Unexpected identifier

javascript - 在 React 中提交表单时收到未定义的错误?

reactjs - JSX 元素类型 'App' 不是 JSX 元素的构造函数。属性 'setState' 的类型不兼容

reactjs - React 可以为隐藏/删除的组件设置动画吗?

javascript - 如何从数组中删除引号

javascript - 使用 url 编码的 JSON 有效负载进行 POST 转换

javascript - 仅在可见 Canvas 区域上绘制 tilemap - 优化

html - 我应该如何以惯用的 React 方式访问自定义 HTML 组件的生成子组件?

javascript - 如何从 xml 响应字符串创建新行

javascript - 替换选择字段中的选项(不添加)