剧场模式
首页前端React诱人的 react 视频教程-基础篇

诱人的 react 视频教程 - 基础篇 #11 子组件向父组件传值

海外散仙厉飞雨 · 化神发布于
6

react 组件间的通信方法

src/App.js

import React, { Component } from 'react';

import Header from './components/Header';
import Home from './components/Home';

class App extends Component {
  onGreet(age) {
    alert(age);
  }

  render() {
    const user = {
      name: "Anna",
      hobbies: ["Sports", "Reading"]
    }
    return (
      <div className="container">
        <div className="row">
          <div className="col-xs-1 col-xs-offset-11">
            <Header />
          </div>
        </div>
        <div className="row">
          <div className="col-xs-1 col-xs-offset-11">
            <h1>Hello !!</h1>
          </div>
        </div>
        <div className="row">
          <div className="col-xs-1 col-xs-offset-11">
            <Home name={"Max"} initialAge={12} user={user} greet={this.onGreet} />
          </div>
        </div>
      </div>
    );
  }
}

export default App;

src/components/Home.js

import React, { Component } from 'react';

import PropTypes from 'prop-types';

export default class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
      age: props.initialAge,
      status: 0
    }
    setTimeout(() => {
      this.setState({
        status: 1
      })
    }, 3000)
  }

  onMakeOlder() {
    this.setState({
      age: this.state.age + 3
    })
  }

  handleGreet() {
    this.props.greet(this.state.age)
  }

  render() {
    return (
      <div className="container">
        <div className="row">
          <div className="col-xs-1 col-xs-offset-11">
            <div>your name is {this.props.name}, your age is {this.state.age}</div>
            <p>Status: {this.state.status}</p>
            <button onClick={() => {this.onMakeOlder()}} className="btn btn-primary">Make me older</button>
            <hr />
            <button onClick={this.handleGreet.bind(this)} className="btn btn-primary">Greet</button>
          </div>
        </div>
      </div>
    );
  }
}

Home.propTypes = {
  name: PropTypes.string,
  age: PropTypes.number,
  user: PropTypes.object,
  greet: PropTypes.func
};
12 条回复
  • hjdtl · 元婴
    hjdtl · 元婴 #1

    谢谢老哥的分享

  • YesAlex · 金仙
    YesAlex · 金仙 #2

    bind(this) 这种语法是不是已经旧了,现在用尖头函数这种了?
    { this.handleGreet(e) } } >Greet

  • 想卖咖啡的程序员 · 元婴

    是旧的 要用箭头函数好点

  • wayyun · 元婴
    wayyun · 元婴 #4

    app.js > home组件中的 changeLink={this.onChangeLinkName.bind(this)} 这行代码我是不是可以理解成,接收home组件中传过来的值,并且给onChangeLinkName()函数 来重新给homeLink赋值?

  • wayyun · 元婴
    wayyun · 元婴 #5

    还有一个问题,我把您之前的changeLink={this.onChangeLinkName.bind(this)} 改成了
    changeLink={(e)=>{this.onChangeLinkName(e)}}箭头函数,但是我不太明白这个e的值是怎么过来的

  • 想卖咖啡的程序员 · 元婴

    就是把 this.onChangeLinkName 作为 changeLink 这个参数,传给组件

  • YesAlex · 金仙
    YesAlex · 金仙 #7

    你好,我理解这个e就是event的缩写,就是一个事件,例如onClick或者onChange类似的事件。

  • 想卖咖啡的程序员 · 元婴

    是的,就是 事件的对象

  • holiday · 元婴
    holiday · 元婴 #9

    为什么不能直接

    要写一个函数handleGreet

  • holiday · 元婴
    holiday · 元婴 #10

    this.props.greet(this.state.age)

  • holiday · 元婴
    holiday · 元婴 #11

    第一个回复被吞了,上面也写错了。
    是为什么不能直接
    < button onClick={this.props.greet(this.state.age)} >

  • 想卖咖啡的程序员 · 元婴

    没啥不能的,可以直接写,只是有时候代码太长,封装成一个 function 可能会好点

加微信(qiuzhi99666)入群订阅号服务号
随机课程
React 进阶提高 - 技巧篇 - 第 1 季

React 进阶提高 - 技巧篇 - 第 1 季

33 个视频3 小时 29 分钟中级

Pro¥ 139.00¥ 111.20

前端React已完结

学员
迅捷斥候tony · 大乘xforgchengz · 元婴穆博嘉 · 真仙yangxue1985 · 元婴owenyikong · 道祖星星De微光 · 金仙骑龙 · 太乙徐少侠 · 元婴jiuli-gcy · 道祖阿震 · 真仙昀 · 元婴娜娜 · 太乙sailorook · 金仙lilu1814 · 元婴与UIuoi89898 · 道祖graywolf · 元婴Emperor · 元婴River- · 大乘wjfc · 太乙LeoTang · 元婴金丹期,大成 · 真仙小平头 · 元婴阿白 · 真仙ldc · 真仙比特 · 元婴kuckboy1994 · 太乙云 · 太乙kasni · 元婴陈召旭 · 元婴CodeSleep001 · 元婴自然萌 · 元婴frank · 真仙YanXinhua · 道祖liulei-jishu · 合体Jean · 道祖zbx7858 · 道祖cc20140820 · 真仙🐳陈昱含🌟 · 元婴329413447 · 元婴Sine · 合体hahah · 合体张文静 · 合体Gary guo · 合体李卓 · 元婴ownryan · 道祖     · 合体syy · 元婴CalvinSraub · 元婴山形瓦力 · 元婴MeteorLx · 元婴靓狼仔 · 真仙那人 · 元婴Actor · 大罗Blue米 · 大乘招财加菲猫 · 金仙mfkyddh · 金仙kaixuan1992 · 道祖daniel_mea · 元婴LeoDo · 太乙jiaoxiaomei · 元婴TaiheChen · 合体Matthew · 道祖CunFlower · 合体ChenCMP · 元婴程 · 合体729902288 · 太乙Max · 合体赵占涛 · 元婴yhuyo · 道祖liar · 真仙左左 洁 · 元婴何芳临 · 元婴lwp007 · 元婴海市蜃楼丶 · 元婴guxiaobai · 道祖chloris · 太乙JSjump · 大罗miaozilong · 合体思进 · 大乘reb00t2018 · 元婴YJwsl · 练虚fmheart · 真仙疯癫 · 金仙背包客 · 合体lolotang · 元婴wasd6631456 · 大乘gitwisdom · 元婴ttyring · 元婴me · 元婴caspertu · 真仙chenjimin132 · 合体suntong233 · 元婴开心就好 · 合体linmiaomiao123 · 元婴咬指头的猫 · 元婴Qujoe · 合体ttswh2009 · 太乙libin · 大乘FastTurbo · 道祖super · 大乘mlb · 元婴woshimaxiaorui · 真仙bobcyd212 · 道祖shishihou · 道祖逆光 · 元婴itlaowang520 · 金仙Kepler · 大罗QiangMicro · 元婴没有昵称 · 元婴jixiyu · 元婴ldn · 元婴00Jane · 合体Smile · 元婴shaoqiming1028 · 元婴gdchent · 元婴子非鱼 · 真仙shangxuewei · 元婴zwkjhx · 元婴Kelly · 元婴huxiaohui · 元婴a653398363 · 元婴qq540618173 · 元婴liunian1993 · 合体hyt9796 · 大乘LINHANXIN · 元婴lbb · 合体ryuusennka · 大罗shmily1996 · 合体h23 · 太乙linhaijian · 元婴huangsiyuan2019 · 元婴Godvmiku · 元婴Messi-Q · 元婴chrisliume · 太乙samuelshang · 太乙lionker · 元婴007sair · 元婴QQ741404277 · 练虚dannyking630 · 真仙
最新动态
迅捷斥候tony · 大乘学习到了6:21
xforgchengz · 元婴学习到了6:25
穆博嘉 · 真仙学习到了6:21
yangxue1985 · 元婴学习到了6:25
owenyikong · 道祖学习到了6:25
统计信息
    学员: 14751
    视频数量: 852
    帖子数量: 421

© 汕尾市求知科技有限公司 | 粤ICP备19038915号 | 在线学员:84

Top