1 react分为聚名卡槽和匿名卡槽两种
2
3
4
5 import React,{Component} from 'react'
6 import Layout from './Layout'
7 import {Consumer} from '../Appcontent'
8
9 class Home extends Component{
10 render(){
11 return <Consumer>{ctx => <HomeHandle {...ctx}/>}</Consumer>
12 }
13 }
14
15 export default Home;
16
17
18 聚名卡槽传递一个对象:
19 function HomeHandle(props){
20 return(
21 <Layout title='商城首页'>
22 {{
23 btn: <button>按钮</button>,
24 content:"我是内容"
25 }}
26 </Layout>
27 )
28 }
29
30 匿名卡槽
31 // function HomeHandle(props){
32 // return(
33 // <Layout title='商城首页'>
34 // <div>Home</div>
35 // </Layout>
36 // )
37 // }
1 Layout 文件
2
3 import React,{Component} from 'react'
4 import TabBar from '../component/TabBar'
5
6 class Layout extends Component{
7 render(){
8 const {showTabBar=true, children} = this.props
9 console.log('this.props', this.props)
10
11 //兼容匿名聚名卡槽写法
12 const a =[]
13 if(children.$$typeof){//匿名卡槽chuldren携带有$$typeof,里面直接包含传递内容
14 a.push(children)
15 }else{
16 for(let i in children){//聚名卡槽children则携带命名的对象名
17 a.push(children[i])
18 }
19 }
20 return (
21 <div>
22 {/* {children.btn}
23 {children.content} */}
24 {
25 a.map((itme,index)=>{
26 return <div key={`chuldren${index}`}>{itme}</div>
27 })
28 }
29 {showTabBar && <TabBar />}
30 </div>
31 )
32 }
33 componentDidMount(){
34 const {title='商城'} = this.props
35 document.title = title
36 }
37 }
38
39 export default Layout;
40
41
42
43 Layout文件中引入的TabBar文件:
44
45 import React,{Component} from 'react';
46 import {Consumer} from '../Appcontent'
47 class TabBar extends Component{
48 render(){
49 return(
50 <Consumer>{ctx => <TabBarHandle {...ctx}/>}</Consumer>
51 )
52 }
53 }
54
55 export default TabBar;
56
57 function TabBarHandle(props){
58 return <div className='TabBar'>TabBarHandle</div>
59 }