Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
369 views
in Technique[技术] by (71.8m points)

react做todolist, 选中radio删除该条list,导致紧跟的radio被选中

问题描述

react编写todolist,使用radio进行删除,删除一条后导致紧跟的raido被选中。
代码效果:
image.png
选中“学习”进行删除后,紧跟的“读书”也被选中了
image.png

相关代码

粘贴代码文本(请勿用截图)

class Lists extends React.Component {
    handleClick(index) {
        this.props.deleteTask(index) // 父级组件进行删除
    }

    render() {
        const {tasks} = this.props
        const taskItems = tasks.map((item, key) => 
            <li key={key}>
                <input type="radio" onClick={this.handleClick.bind(this, key)} />
                {item.name}
            </li>)
        return (
            <ul>{taskItems}</ul>
        )
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

这是新手经常犯的一个错误,程序中应该尽量避免不要将map中的遍历下标数(key)作为React Dom的key值来使用。

因为当你选中了“学习”之后,key=1的这个Dom中的Radio置为了选中状态。

而当你把“学习”删除了之后,排在学习之后的“读书”的key值变成了1,此时react比较key=1时,发现只要更新Radio的选中状态即可,所以维持了原来“学习”选中时的状态,也就是将“读书”的Raido置为了选中。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...