react中的父子传值

 在app.js中,使用子组件tab.js,并进行以下的操作:

1. 点击按钮,变量的值进行递增或递减;

2.父子传值,实现点击tab栏,打印出对应的li 的效果;

App.js中

// import React from 'react'
//下面的class类的书写中可以省略 React
import { Component } from 'react'
import './App.css';
//在App中使用新建的tab.js文件
import Tab from './components/Tab'
//
//声明一个class类
class App extends Component {
  // 类的共有属性放到 constructor 里面**
  //**3.constructor 函数,可以接受传递过来的参数,同时返回实例对象**
  //使用super调用了父类中的构造函数 (super一定要写在私有属性的前面)
  constructor() {
    super()
    //在state中写 变量
    this.state = {
      a: 1,
      arr: ['商品', '列表', '评价', '我的'],
      // text: ''
    }
  }
  //
  //因为react是单向数据,页面要实现数据实时改变,
  //在constructor中写 state属性,里面放变量
  //
  //在改变值时,会出现this的指向问题,所以在更改变量的值时
  //修改this的三种方式
  //函数名.call(null,参数1,参数2)//以逗号隔开 传null指向window
  // 函数名.apply(null,[参数1,参数2])
  // 函数名.bind()
  //1.点击button(绑定事件之后this指向的就是触发事件的事件源)
  //在事件onClick中 this.fn.bind
  //2.将函数写为箭头函数,在该函数里面写更改变量的逻辑(函数或变量可以不带var)
  fn = () => {
    this.state.a++
    var b = this.state.a //声明一个变量进行接收,避免this出现指向问题
    //修改变量值
    this.setState({
      a: b
    })
  }
  // 子 中点击的 传递给 父 时,需要通过函数来传递
  //
  getLi(text) {
    console.log(text);
   //将 从 子中获取的数据 放进 变量中,并展示到页面上
    // console.log( this.state.text); //会报错
  }
  //渲染页面
  render() {
    //传递的数组,可以放在此处
    //
    return (
      <div className="App">
        {/* 使用子组件  */}
        {/* 值的使用,要用{}里放 */}
        <span>{this.state.a}</span>
        <button onClick={this.fn}>点击</button>
        {/* 向子组件传数组 */}
        {/* <p>{this.state.text}</p> */}
         {/* 父子传值 */}
        <Tab arr={this.state.arr} getLi={this.getLi} />
      </div>
    )
  }
}
export default App;

子组件 Tab.js

import { Component } from 'react'
import './Tab.css'
class Tab extends Component {
     //子 中点击的要传给 父,需要函数还进行传递
     clickLi(items){
        //调用父中 对应的函数
        this.props.getLi(items)
     }
    render() {
        // console.log(this.props.arr);  //接收传来的数组
        //使用map的方式 进行遍历,因为map方法存在返回值
        return (
           <ul>
             {
             this.props.arr.map((item,index)=>{
                 //点击事件,使用bind的方法,将this指向 点击li 的函数, 将li中点击的值,传给该函数
                 return <li key={index} onClick={this.clickLi.bind(this,item)}>{item}</li>
             })
             }
           </ul>
        )
    }
}

export default Tab

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值