栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

React点击切换子组件

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

React点击切换子组件

业务描述

在如上图所示的页面上我需要分别点击底下的三个图标将中间内容部分分别替换成对应的组件,也就是在一个大组件中分别切换三个小组件
效果展示
因为是移动端,请按F12切换成移动端
思路
通过控制css属性display:none来控制三个页面是谁来显示,中间主要是组件之间的通讯值得一说

实现
1 首先简单写好三个子组件

class PageChatContent extends React.Component{
    constructor(props){        super(props);
    }
    render(){        return (
        chat
        )
    }
}class PageSocialContent extends React.Component{
    constructor(props){        super(props);
    }
    render(){        return (
        social
        )
    }
}class CircleSocialContent extends React.Component{
    constructor(props){        super(props);
    }
    render(){        return (
        circle
        )
    }
}

2将子组件填到父组件中

 return(            
                    
                        
                    
                    

                        
                        
                        

                    
                    
                        this.changePage(msg)}
                        >
                
            
        )

3 通过设置state来设置初始显示

     this.state={

            chatShow:"",
            socialShow:jsPage.showFlag,
            circleShow:jsPage.showFlag,
            msg:""
        }

jsPage.showFlag是我设置的css

import jsPage from '../css/jsPage.css'
.showFlag{    display: none;}
  
                        
                        

4 底部导航栏的实现
通过map遍历数据生成

class JsPageBottomNavigation extends React.Component{
    constructor(props){        super(props);        this.changeFrom = this.changeFrom.bind(this);

    }
    render(){        //需要遍历生产的数据
        const posts = [
            {id: 1,  name:'chat',imgUrl:sysImg1},
            {id: 2,  name:'social',imgUrl:sysImg2},
            {id: 3,  name:'circle',imgUrl:sysImg3},

        ];
        const fromList=posts.map(
            (number)=>
                
                    this.props.changePage(number.name)}

                    >
                
                    );        return (
            
                
                    {fromList}
                
            
        )
    }

}

5,通讯!最关键的部分
因为我要通过我的底部子组件的点击来改变我中间子组件的显示内容,属于
兄弟组件的通讯,实现方式就是将数据通过他们的共同父组件来传递,
也就是导航组件将数据传到父组件,父组件再将数据传到显示组件
首先我在父组件定义一个方法,并将方法传到导航组件中

 changePage(msg){       this.setState({
           msg
       });}

注意:一定要使用箭头函数,因为箭头函数的this作用域始终作用于生产箭头函数的地方,这样我们就可以听过让子函数来修改组件的state里面的值,从而达到传值的目的,就像上面的方法中的msg要首先在state中定义

   this.changePage(msg)}
                        >

然后,在子组件的map遍历中每个图标点击调用的方法参数都会不同,通过点击子组件不同的图标,将会传不同的值到父组件

  const posts = [
            {id: 1,  name:'chat',imgUrl:sysImg1},
            {id: 2,  name:'social',imgUrl:sysImg2},
            {id: 3,  name:'circle',imgUrl:sysImg3},

        ];
        const fromList=posts.map(
            (number)=>
                
                    this.props.changePage(number.name)}

                    >
                
                    );

在父组件中通过接受到不同的值,然后做出对应的处理,最后将处理好的值传到显示子组件,这样就完成了组件间的通讯

 changePage(msg){
       this.setState({
           msg
       });
       console.log(msg)
       if(msg=="chat"){
           this.setState(
               {   chatShow:"",
                   socialShow:jsPage.showFlag,
                   circleShow:jsPage.showFlag, })
       }
       if(msg=="social"){
           this.setState(
               {   chatShow:jsPage.showFlag,
                   socialShow:"",
                   circleShow:jsPage.showFlag, })
       }
       if(msg=="circle"){
           this.setState(
               {   chatShow:jsPage.showFlag,
                   socialShow:jsPage.showFlag,
                   circleShow:"", })
       }
   }

原文出处

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/246801.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号