美文网首页
react 轮播图组件---初入坑篇

react 轮播图组件---初入坑篇

作者: 弦生_a3a3 | 来源:发表于2021-10-05 10:39 被阅读0次

轮播图父组件:


import React,{ Component } from "react";
import Swiper from "./swiper";
// 引用子组件轮播
import AddContact from "./addContact";
class App extends Component{
 state={
   swiperIndex:1,  
   listPic:[
     'https://img0.baidu.com/it/u=2614555822,2668128081&fm=26&fmt=auto',
     'https://img2.baidu.com/it/u=4134693183,87150378&fm=15&fmt=auto',
     'https://img1.baidu.com/it/u=3757299288,3537520756&fm=26&fmt=auto'
 ]
 };
 addSubmit=(sub)=>{
   console.log(sub,'父组件接收子组件传值');
 }

 render(){
   return (
     <div className="App">
       <header className="App-header">
         <p>这是测试</p>
       </header>
       <Swiper listPic={this.state.listPic} activeIndex={this.state.swiperIndex}/>
       {/* 使用子组件轮播进行props值传递,父组件传值 */}
       <AddContact addSubmit={this.addSubmit}/>
     </div>
   );
 }

}

export default App;

轮播图子组件创建:

      
    // 这是容器组件
    import React,{Component} from 'react';  
    import './style/swiper.css'
 
    class Swiper extends  Component{
        state={
            name:'simba',
            list:this.props.listPic,
            // 接受父组件传值
            activeIndex:this.props.activeIndex,
             // 接受父组件传值
            timer:null
            // 时间控制器
          }
          handleSwpier(row,index){
             clearInterval(this.state.timer)
            //  暂停时间控制器
              console.log(row)
            this.setState({
                activeIndex:index
            })
            this.actionSwiper()
            // 开启时间控制
          }
          actionSwiper(){
           let timer = setInterval(()=>{
              console.log(this.state.list.length-1,this.state.activeIndex)
              if(this.state.activeIndex>= this.state.list.length-1){
                this.setState({
                  activeIndex:0
                })
              }else{
                this.setState({
                  activeIndex:this.state.activeIndex+1
                })
              } 
             
              
            },3000)
            this.setState({
              timer
            })
          }
          componentDidMount(){
           this.actionSwiper()
          //  挂载时开启时间控制
          }
        render(){

            return(
                <div className="swiper">
                {
                     this.state.list.map((item,index)=>{
                         return <img key={index} className={this.state.activeIndex===index?'action':''} src={this.state.list[this.state.activeIndex]}></img>
                     }) 
                }
                  <ul>
                    {
                        this.state.list.map((item,index)=>{
                            return <li key={index}
                             onClick={this.handleSwpier.bind(this,item,index)} className={this.state.activeIndex==index?'active':''}></li>
                        })
                    }
                    {/* 这里可以直接通过bind函数绑定this,this默认第一位指向当前Component组件 */}
                  </ul>
                </div>
            )
        }
    }

    export default Swiper;
    // 导出组件

如何在render中使用方法获取内部this值

bind(this)可在render函数内绑定当前this指向,如不绑定不会指向当前Component函数内部也无法改变state内部值(也在在函数内部用箭头函数获取Component当前this指向)

子组件如何传值给父组件

this.props.handleChange(val):handleChange为当前子组件传给父组件的函数名,val为当前需要传给父组件接收的值
子组件通过this.props传值给父组件

父组件传值给子组件

直接在子组件上定义想要的名称例如:activeIndex='1',子组件接收只需要通过this.props.activeIndex即可获取当前父组件的传值

相关文章

网友评论

      本文标题:react 轮播图组件---初入坑篇

      本文链接:https://www.haomeiwen.com/subject/bfvinltx.html