<style>
    .active{
      color:red
    }

  </style>
</head>
<body>
  <div id="root"></div>
  <script src='./babel.min.js'></script>
  <script src='./react.js'></script>
  <script src='./react-dom.js'></script>
  <script type="text/babel">


  class App extends React.Component{
    constructor(props){
      super(props)
      this.header=['选项卡1','选项卡2','选项卡3']
      this.content=['选项1内容','选项2内容','选项3内容']
      this.state={
        index:0,
           }
    }
    change=(e)=>{
      this.setState({
        msg:e.target.value
      })
    }

    changeIndex=(i)=>{
      this.setState({
        index:i
      })
    }

    render(){
      console.log(this.header)
      return (
        <div>
          <Header content={this.header}
                  changeIndex={this.changeIndex}
          />
          <Box content={this.content}
              index={this.state.index}
          />
        </div>
      )
    }
  }


  class Header extends React.Component{
    constructor(props){
      super(props)
      this.state={
        index:0,
        active:'active'
      }
    }

    changeIndex=(index)=>{
      const {changeIndex}=this.props
      changeIndex(index)
      this.setState({index:index})
    }
    render(){
      const{content}=this.props
      return (
        <div>
          {
            content.map((val,idx)=>{
              return(<button onClick={()=>{this.changeIndex(idx)} } className={this.state.index==idx?this.state.active:''} key={idx}>{val}</button>)
            })
          }
        </div>
      )
    }
  }
  class Box extends React.Component{

    render(){
      const index=this.props.index.toString()
      return(
        <div>
          {index && this.props.content[index]}
        </div>
      )
    }
  }

  ReactDOM.render(<App />,document.getElementById('root'))
  </script>

20-选项卡

<style>
    .active{
      color:red
    }

  </style>
</head>
<body>
  <div id="root"></div>
  <script src='./babel.min.js'></script>
  <script src='./react.js'></script>
  <script src='./react-dom.js'></script>
  <script type="text/babel">


  class App extends React.Component{
    constructor(props){
      super(props)
      this.header= [{index:1,title:'选项卡1'},{index:2,title:'选项卡2'},{index:3,title:'选项卡3'}]
      this.content= [{index:1,content:'选项1内容'},{index:1,content:'选项2内容'},{index:1,content:'选项3内容'}]
      this.state={
        index:0,
           }
    }
    change=(e)=>{
      this.setState({
        msg:e.target.value
      })
    }

    changeIndex=(i)=>{
      this.setState({
        index:i
      })
    }

    render(){
      return (
        <div>
          <Header content={this.header}
                  changeIndex={this.changeIndex}
          />
          <Box content={this.content}
              index={this.state.index}
          />
        </div>
      )
    }
  }


  class Header extends React.Component{
    constructor(props){
      super(props)
      this.state={
        active:'active',
        index:0
      }
    }

    changeIndex=(index)=>{
      const {changeIndex}=this.props
      changeIndex(index)
      this.setState({index:index})
    }

    render(){
      const{content}=this.props
      //className是变化的,要刷新视图的,变化的数据不能用数据源来做判断,用state来刷新视图
      return (
        <div>
          {
            content.map((val,idx)=>{
              return(<button onClick={()=>{this.changeIndex(idx)} } className={this.state.index==idx?this.state.active:''} key={idx}>{val.title}</button>)
            })
          }
        </div>
      )
    }
  }
  class Box extends React.Component{

    render(){
      const index=this.props.index
      return(
        <div>
          {index.toString() && this.props.content[index].content}
        </div>
      )
    }
  }

  ReactDOM.render(<App />,document.getElementById('root'))
  </script>
01-23 01:31