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

React.js如何生成正确的回调函数?[副本]

郏经纬
2023-03-14

我正在使用react.js应用程序,我记得我能够用pops将回调函数从一个孩子传递给一个家长,但我无法再次实现这一点(我希望它保持简单,没有通量库):

所以我的父母App

class App extends Component {
  constructor(props) {
   super(props);
 }

 showViewAction(viewToShow){
   console.log(viewToShow);
 }

  render() {
    return (
      <div>
        <AppMenu showView={this.showViewAction}/>
      </div>
    );
  }
}

和我的孩子AppMenu

class AppMenu extends Component{

  constructor(props) {
   super(props);
 }

  showCirculares(){
    this.props.showView("circulares");
  }

  render(){

    return(
    <div>
      <MenuButton onClick={this.showCirculares} buttonTitle="SomeOtherProp"/>
    </div>
    );
  }
}

无论我尝试什么,我都会得到:

无法在showCirculares读取未定义的属性“props”;

我知道这将通过一个简单的任务解决,这是基本的React.js内容,只是我找不到解决方案!!我做错了什么?

共有3个答案

南门野
2023-03-14

您可以使用@jered said之类的bind函数显式绑定showcrourcares,也可以使用箭头函数隐式绑定到调用this的对象。

<MenuButton onClick={() => this.showCirculares()} buttonTitle="SomeOtherProp"/>
平航
2023-03-14

您需要将showCirculares与类绑定,这样它就不会有this定义。以下是实现这一点的方法。

像这样在构造函数中绑定您的方法

constructor(props) {
   super(props);
   this.showCirculares = this.showCirculares.bind(this)
 }

  showCirculares(){
    this.props.showView("circulares");
  }

或者像这样简单地使用箭头函数

showCirculares = () => {
   this.props.showView("circulares");
}
丁经略
2023-03-14

看起来您需要将上下文绑定到回调函数。在构造函数中执行以下操作:

应用程序

class App extends Component {
  constructor(props) {
   super(props);
   this.showViewAction = this.showViewAction.bind(this);
 }

 showViewAction(viewToShow){
   console.log(viewToShow);
 }

  render() {
    return (
      <div>
        <AppMenu showView={this.showViewAction}/>
      </div>
    );
  }
}

应用菜单

class AppMenu extends Component{

  constructor(props) {
   super(props);
   this.showCirculares = this.showCirculares.bind(this);
 }

  showCirculares(){
    this.props.showView("circulares");
  }

  render(){

    return(
    <div>
      <MenuButton onClick={this.showCirculares} buttonTitle="SomeOtherProp"/>
    </div>
    );
  }
}

为什么?简短的版本是,除非您绑定,否则当您的函数运行时,的值是未定义的。您需要的是组件的上下文,因此必须手动将函数绑定到组件。

 类似资料:
  • 问题内容: TheObject = { 当我尝试调用此方法时: 它返回“未定义”。我不知道问题出在哪里。该数组是在成功函数中创建的,但是我无法正确返回它。谢谢你的帮助! 问题答案: 在您的代码中,您正在寻找在进行ajax调用之后使用过程编码的方法。主要问题是在ajax调用完成之前正在寻找。 另一个问题是您要向该函数返回组,但是该函数什么也不返回。 因此,您需要像这样将回调引入ajax函数:

  • 问题内容: 我试图在Go中生成一个随机字符串,这是我到目前为止编写的代码: 我的执行速度很慢。使用进行播种会在一定时间内带来相同的随机数,因此循环会一次又一次地迭代。如何改善我的代码? 问题答案: 每次设置相同的种子,您将获得相同的序列。因此,当然,如果您将种子设置为快速循环中的时间,则可能会多次调用相同的种子。 在您的情况下,在您调用函数直到拥有不同的值之前,您正在等待时间(由Nano返回)。

  • 我试图在反应应用程序中显示时间,并希望以12小时的格式显示。 我编写了一个函数,如果小时数显示为13或以上,则删除“12”。我想将该函数传递到setState,但仍然会得到一个语法错误。 我希望看到下午1:31,但我只是在setState行中出现了语法错误。我无法忘记这一点。 除此之外,我在之前的状态下如何通过?

  • 问题内容: 我一直在努力,但是我不明白。我是编程新手,所以几乎每个新步骤都是一个实验。尽管在没有参数/返回值的情况下调度正常的闭包没有问题,但到目前为止,我还不了解如何处理带有(多个)参数并最终返​​回的函数。 为了弄清楚适当的“解决方法”的逻辑,如果有人可以发布一个实际的示例,这样我就可以确定自己是否正确,那就太好了。我将非常感谢您提供的任何帮助…如果其他一些实际示例以更好的方式说明了该主题,请

  • 我有很多函数,希望使用数组来调用它们。我知道如何用c来做,但不知道如何用java来做。我的意图代码如下:

  • 问题内容: 我有一个注册事件处理程序的构造函数: 但是,我无法在回调内部访问已创建对象的属性。看起来好像不引用创建的对象,而是引用另一个对象。 我也尝试使用对象方法而不是匿名函数: 但是也有同样的问题 如何访问正确的对象? 问题答案: 你应该知道什么 (又名“上下文”)是每个功能内的特殊关键字和它的值仅取决于 如何 调用函数,而不是如何/何时/何它被定义。它不受其他变量之类的词法作用域的影响(箭头