<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="../node_modules/react/umd/react.development.js"></script> <script src="../node_modules/react-dom/umd/react-dom.development.js"></script> <script src="../node_modules/babel-standalone/babel.js"></script> </head> <body> <div id="app"> </div> <script type="text/babel"> let arr = [1,2,3,4]; // 根组件默认拿到全局变量为data的值 在子组件传值直接传值进行调用 class List3 extends React.Component{//必须是大写的首字母 constructor(props){ //构造函数传参 super(props); //调用所有原型上的属性来实现props传值 this.state = { n:0 } } inc(ind){ // 当调用时不绑定this时,this指向调用的window,由于是严格模式所以指向undefined this.setState({ n:ind }) }; render(){ console.log(this);//符号必须是分号不能是逗号 let {data} = this.props; let {n} = this.state; return( data.map((item,index)=>{ return ( <div key={index} style={{color:n===index?'red':null}} onClick={this.inc.bind(this,index)}>{item}</div> //这里的this指向的是实例 但在再调用时 由于是window.onclick调用 // 导致内部this.setState拿不到this指向。又由于es6严格模式所以不会指向winodow而是undefined // 所以就会报错 不存在这个属性 ) } ) ) } } ReactDOM.render( <div> <List3 data={arr}/> </div>, document.getElementById('app') ) </script> </body> </html>