当前位置: 首页 > 知识库问答 >
问题:

如何在父组件和子组件之间传递数据

端木桐
2023-03-14

我正在学习通过教程在父组件和子组件之间传递数据。我仔细检查了我的代码,仍然没有找出错误。

我的index.js

import React, {Component} from 'react';
import ReactDom from 'react-dom';
import {Header} from './components/Header';
import {Home} from './components/Home';

class App extends Component {
  constructor(){
    super();
    this.state ={
      HomeLink:"home"
    };
  }
  onGreet(){
    alert("hello");
  }

  onChangeLinkName(newName){
    this.setState({
      HomeLink:newName
    });
  }
  render(){
    return (
      <div className="container">
        <div className="row">
          <div className="col-xs-10 col-xs-offset-1">
            <Header HomeLink={this.state.HomeLink} />
          </div>
        </div>
        <div className="row">
          <div className="col-xs-10 col-xs-offset-1">
            <Home
            name={"max"}
             initialAge={27}
             greet={this.onGreet}>
             changeLink={this.onChangeLinkName.bind(this)}
              <p>This is a paragraph passed from props</p>
            </Home>
          </div>
        </div>
      </div>
    );
  }
}
ReactDom.render(
  <App/>, window.document.getElementById("root")
);

Home.js

按钮更改链接onClick事件正在调用changeLink函数,该函数将新链接传递给props。

import React from 'react';

export class Home extends React.Component {
  constructor(props){
    super();
    this.state = {
      age:props.initialAge,
      status:0,
      homeLink:"changed link"
    };
    setTimeout(() => {
      this.setState({
        status:1
        });
    },3000);
  }
  onMakeOlder(){
    this.setState({
      age:this.state.age+3
    });
  }
  onChangeLink(){
    this.props.changeLink(this.state.homeLink);
  }

  render(){
    return(
      <div>
        <p>In a new Component</p>
        <p>Your name is {this.props.name} and your age is {this.state.age}</p>
        <p>{this.state.status}</p>
        <hr/>
        <button onClick={()=> this.onMakeOlder()}>make me older</button>
        <hr/>
        <button onClick={this.props.greet}>greet</button>
        <hr/>
        <button onClick={this.onChangeLink.bind(this)}>change link</button>
      </div>
    );
  }
}

Home.propTypes = {
  name:React.PropTypes.string,
  age:React.PropTypes.number,
  user:React.PropTypes.object,
  children: React.PropTypes.element.isRequired,
  greet:React.PropTypes.func,
  changeLink:React.PropTypes.func
};

错误:-

Uncaught TypeError: this.props.changeLink is not a function

共有2个答案

梁鸣
2023-03-14

将要传递的道具切换到:

changeLink={this.onChangeLinkName}

在父构造函数中:

this.onChangeLinkName=this.onChangeLinkName.bind(this)

最后,在按钮调用中:

卜季萌
2023-03-14

代码中有一个输入错误。

<Home
  name={"max"}
  initialAge={27}
  greet={this.onGreet}>
  changeLink={this.onChangeLinkName.bind(this)}
    <p>This is a paragraph passed from props</p>            
</Home>

请注意,在使用以下字符设置属性greet之后,如何关闭Home组件:

这将修正你的错误,你应该能够前进。

 类似资料:
  • 本文向大家介绍react 父组件与子组件之间的值传递的方法,包括了react 父组件与子组件之间的值传递的方法的使用技巧和注意事项,需要的朋友参考一下 概念上,组件是封闭的环境。React中是单向数据流的设计,也就是是说只有父组件传递资料给子组件这回事。以正确的技术说明,拥有者组件可以设置被拥有者组件中的数据。 那么子组件要如何与父组件沟通这件事,简单的来说,是一种迂回的作法,在父组件中设置了一个

  • 问题内容: 我正在尝试将数据从子组件发送到其父组件,如下所示: 这是子组件: 我需要的是由用户在父组件中获取选定的值。我收到此错误: 谁能帮我发现问题? PS子组件正在从json文件创建一个下拉列表,并且我需要该下拉列表来显示json数组的两个元素彼此相邻(例如:“ aaa,english”是首选!) 问题答案: 这应该工作。在发送回道具时,您将其作为对象发送,而不是作为值发送,或者将其用作父组件

  • 我有两个组件,一个是子组件,另一个是父组件。我正在有条件地撕裂我的子组件。这段代码的功能就是当你们点击按钮时,定时器将显示,当你们点击停止定时器将停止。这里“Timer”是子组件,我在“Timer”组件中使用了state属性,我想在单击“stop Timer button”之前显示Timer的值。那么如何将“timer”状态变量值从子组件传递到父组件呢。 这是父组件,下面的代码用于“计时器”组件。

  • 问题内容: 我有一个调用会弹出一个的,以便用户可以选择目录。这些都是单独的类。从中传递值的正确方法是什么,以便我可以在中显示目录的路径? 编辑:更新了问题。 问题答案: 这是一个不完整的示例,但我想可以使您了解如何实现所需的目标。重要的一点是引用要在其中进行选择的属性,例如 参见下面如何将其放置在代码中: 希望对您有所帮助,对不起您没有提供完整的示例。 编辑 本质上,我们没有将任何参数传递给Abs

  • 问题内容: 在React中,我有类似的文件 parent.js 包含文本框和按钮 child.js 包含P标签 App.js 包含父组件和子组件 问题 将“父级”上的“文本框”值传递给子级,并将其显示在子级标记中。 完整代码 堆叠 问题答案: 更新了示例以将数据传递给子组件。 https://stackblitz.com/edit/react- trmj9i?file=child.js 在下面添加

  • 子组件事件能否到传递父组件