React | 组件传值

1. 给子组件传值(构造函数)

现在组件App给子组件Home传值,index.home

//App.js

import index from './common/json/data.json'

class App extends Component {
  render() {
    return (
      <div className="App">

        {/* 这里的data会成为Home组件构造函数参数props的一个属性 */}
        <Home data={index.home} />

      </div>
    )
  }
}

构造函数获取props 

//Home.jsx

export default class Home extends Component {

  constructor(props) {
    super(props)

    // 获取参数props的属性
    let data = props.data

    this.state = {
      title: data.title
    }

  }

  /** codes **/

}

 2. 兄弟组件传值

现在组件TabRouter要获得组件Home的name属性(组件注册名)

//App.js

import index from './common/json/data.json'

class App extends Component {
  render() {
    return (
      <div className="App">

        <TabRouter>
          <Home data={index.home} />
          <Project data={index.project} />
          <About data={index.about} />

        </TabRouter>

      </div>
    )
  }
}
//TabRouter.jsx

export default class TabRouter extends Component {
  constructor(props) {
    super(props)
    this.state = {

      // 回调函数
      tabs: this.getNames(),

      currentTab: null
    }
  }
  getNames() {
    let names = []

    // this.props.children获得孩子数组
    for (const child of this.props.children) {
      
      // 获得组件注册名child.type.name
      names.push(child.type.name)

    }

    return names
  }

  /** codes **/

}

不过最好不要使用component.type.name这个属性(它是组价class类的类名),因为最后npm build的过程中会混淆丑陋化代码,这个name值会变成一个字母。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值