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

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

下载源码hfpp2012发布于React5676 次点击播放时长:05:51
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 #1

    谢谢老哥的分享

  • YesAlex #2

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

  • hfpp2012 #3
    YesAlex #10 回复

    是旧的 要用箭头函数好点

  • wayyun #4

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

  • wayyun #5
    YesAlex #10 回复

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

  • hfpp2012 #6
    wayyun #10 回复

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

  • YesAlex #7
    wayyun #10 回复

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

  • hfpp2012 #8
    YesAlex #10 回复

    是的,就是 事件的对象

  • holiday #9

    为什么不能直接

    要写一个函数handleGreet

  • holiday #10

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

  • holiday #11

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

  • hfpp2012 #12
    holiday #10 回复

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

支付宝付款
订阅或购买扫码加我微信

加我微信:15014006126

相似的视频
诱人的 react 视频教程 - 基础篇 #12 组件间传值

诱人的 react 视频教程 - 基础篇 #12 组件间传值

免费播放时长:07:05

2525 次点击

诱人的 react 视频教程 - 基础篇 #10 无状态组件

诱人的 react 视频教程 - 基础篇 #10 无状态组件

免费播放时长:05:43

4850 次点击

诱人的 react 视频教程 - 基础篇 #4 多个组件

诱人的 react 视频教程 - 基础篇 #4 多个组件

免费播放时长:05:09

4955 次点击

诱人的 react 视频教程 - 基础篇 #8 组件的 state 属性

诱人的 react 视频教程 - 基础篇 #8 组件的 state 属性

免费播放时长:03:54

5701 次点击

诱人的 react 视频教程 - 基础篇 #3 第一个组件

诱人的 react 视频教程 - 基础篇 #3 第一个组件

免费播放时长:07:42

6243 次点击

© Rails365 | 隐私条款 | 服务条款 | 粤ICP备15004902号 | 在线学员:24

Top