作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想向我的列表添加一个字符串,并且我有一个与 HelloWordComponent
分开工作的 CounterComponent
,我为“Microsoft”设置 1,为“FaceBook”设置 2 3 代表“ react ”;当我将“yahoo”添加到列表的第一个时,“yahoo”的计数器设置为 1 并且 react 变为 0。
我知道我必须使用唯一 key ,并且我认为 {name}
是合格的,但我不知道到底在哪里使用 key = {name}
?
class HelloWordComponent extends React.Component {
render() {
return <div>{this.props.name}</div>
}
}
class Counter extends React.Component {
constructor(){
super()
this.onPlusClick = this.onPlusClick.bind(this)
this.state = {count : 0}
}
onPlusClick(){
this.setState(prevState => ({count: prevState.count + 1}))
}
render(){
return <div>
{this.state.count}
<button onClick = {this.onPlusClick}>+</button>
</div>
}
}
class App extends React.Component{
constructor(){
super()
this.addName = this.addName.bind(this)
this.state = {
name: "Sara",
list:['Microsoft', 'FaceBook', 'React']
}
}
addName(){
this.setState(prevState =>({list: ['Yahoo', ...prevState.list]}))
}
render(){
return (
<div >
{this.state.name}
{this.state.list.map(name =>{
return <div>
<HelloWordComponent key = {name} name = {name}/>
<Counter/>
</div>
})}
<br/>
<button onClick= {this.addName}>add a Name</button>
</div>
);
}
}
ReactDOM.render(<App/>,document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"> </div>
最佳答案
我找到了问题的正确解决方案,我必须在我的父根元素 key = {name}
中设置唯一键 ( <div key = {name}>
)因此渲染方法更改为:
render(){
return (
<div >
{this.state.name}
{this.state.list.map(name =>{
return <div key = {name}>
<HelloWordComponent name = {name}/>
<Counter/>
</div>
})}
关于reactjs - 如何在React中实现Reconciliation概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126705/
我是一名优秀的程序员,十分优秀!