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

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

海外散仙厉飞雨 · 真仙发布于
5

src/App.js

import React, { Component } from 'react';

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

class App extends Component {
  constructor() {
    super();
    this.state = {
      homeLink: "Home"
    }
  }

  onGreet(age) {
    alert(age);
  }

  onChangeLinkName(newName) {
    this.setState({
      homeLink: newName
    })
  }

  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 homeLink={this.state.homeLink} />
          </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}
              changeLink={this.onChangeLinkName.bind(this)}
            />
          </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,
      homeLink: "Changed Link"
    }
    setTimeout(() => {
      this.setState({
        status: 1
      })
    }, 3000)
  }

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

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

  onChangeLink() {
    this.props.changeLink(this.state.homeLink);
  }

  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>
            <hr />
            <button onClick={this.onChangeLink.bind(this)} class="btn btn-primary">Change Header Link</button>
          </div>
        </div>
      </div>
    );
  }
}

Home.propTypes = {
  name: PropTypes.string,
  age: PropTypes.number,
  user: PropTypes.object,
  greet: PropTypes.func
};

src/components/Header.js

import React from 'react';

const Header = (props) => {
  return (
    <div className="container">
      <div className="row">
        <div className="col-xs-1 col-xs-offset-11">
          <h1>{props.homeLink}</h1>
        </div>
      </div>
    </div>
  );
};

export default Header;
2 条回复
  • ShirlyHY · 金仙后期

    哈哈哈哈哈老师口音。。。实在忍不住想笑啊哈哈哈哈但我居然都能听懂!“要让try1传数据给try2的话”,,,老师讲得挺清晰的,辛苦老师啦!

  • 海外散仙厉飞雨 · 真仙

    惭愧惭愧,不准的普通话,多谢支持。

学员
gitwisdom · 真仙ttyring · 真仙me · 真仙caspertu · 金仙后期chenjimin132 · 金仙初期suntong233 · 真仙开心就好 · 金仙后期linmiaomiao123 · 真仙咬指头的猫 · 真仙Qujoe · 真仙FastTurbo · 大罗super · 金仙巅峰ttswh2009 · 太乙巅峰mlb · 真仙guxiaobai · 道祖woshimaxiaorui · 太乙玉仙shishihou · 太乙巅峰bobcyd212 · 道祖逆光 · 真仙Xiao-su · 真仙itlaowang520 · 太乙巅峰Kepler · 大罗巅峰duzhihao · 金仙后期没有昵称 · 真仙jixiyu · 真仙ldn · 真仙00Jane · 金仙后期Smile · 真仙shaoqiming1028 · 真仙子非鱼 · 太乙玉仙shangxuewei · 真仙zwkjhx · 真仙Kelly · 真仙huxiaohui · 真仙YJwsl · 金仙中期a653398363 · 真仙qq540618173 · 真仙liunian1993 · 金仙后期hyt9796 · 金仙巅峰lbb · 金仙后期LINHANXIN · 真仙shmily1996 · 金仙后期h23 · 大罗linhaijian · 真仙huangsiyuan2019 · 真仙Godvmiku · 真仙Messi-Q · 真仙graywolf · 真仙samuelshang · 大罗007sair · 真仙QQ741404277 · 金仙中期dannyking630 · 太乙玉仙GuiltyKirito · 金仙后期
最新动态
gitwisdom · 真仙学习到了0:18
ttyring · 真仙学习到了5:44
me · 真仙学习到了7:33
caspertu · 金仙后期学习到了7:07
chenjimin132 · 金仙初期学习到了7:07

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

Top