javascript - React 覆盖组件函数

标签 javascript reactjs react-props react-component

我正在尝试执行以下操作,目前我有 3 个组件:

Parent.js:

class Parent extends Component {
  applyFilters = () => {console.log("applying original filters")}

  setApplyFilters = (callback) => {
    this.applyFilters = () => callback();
  }

  render(){
    return(
      <div>
        <Filters applyFilters={this.applyFilters} />
        <Screen1 setApplyFilters={this.setApplyFilters} />
      </div>
    )
  }
}

Filters.js:

class Filters extends Component {
  onButtonPress = () => {
    this.props.applyFilters(),
  }

  render(){
    ...
  }
}

Screen1.js:

class Screen1 extends Component {
  applyFilter = () => {
    console.log("Applying filters using the callback function in Screen1");
  }

  componentDidMount = () => {
    this.props.setApplyFilters(() => this.applyFilters());
  }

  render(){
    ...
  }
}

我有一个所有屏幕通用的过滤器组件。我有多个 Screen1 类型的屏幕。

我想在当前屏幕的 componentDidMount 上将 applyFilter 函数作为回调传递给父级,并从父级传递 applyFilter > 作为 Filter 组件的支柱。当调用过滤器的 onButtonPressed 处理程序时,它应该为已安装的屏幕执行 applyFilter 回调。

但由于某种原因,它只是打印到控制台“应用原始过滤器”,这是原始字符串,就好像该函数没有被屏幕上的回调覆盖一样。

如何正确执行此操作?

最佳答案

this.applyFilters 在渲染过程的早期就被解析为 () => {console.log("applying originalfilters")}

<Filters applyFilters={this.applyFilters} />

在这种情况下,您只关心它引用的函数被调用时的值,因此您希望延迟设置它。

<Filters applyFilters={() => this.applyFilters()} />

这样,当在 Filters 组件中调用 applyFilters 时,this.applyFilters 中引用的值将被解析,然后被调用。

关于javascript - React 覆盖组件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53622157/

相关文章:

javascript - 如何编写用于计算 Dynamic CRM 2011 中表单数量的 Javascript 代码?

javascript - 在 javascript 中更改 CSS "left"属性在 IE 中不起作用

Javascript 游戏自动创建新对象以连续添加到数组中 [javascript]

reactjs - 如何从 api 迭代对象列表并将其渲染到 jsx 页面 React 功能组件

javascript - 通过 props onPress 传递值

javascript - AngularJS - 递归函数禁用 $scope.on ('destroy' )

javascript - 将选项作为对象数组进行多项选择

reactjs - 操作 svg 圆原点以创建围绕中心的旋转动画

javascript - 无法呈现将 React 状态传递给另一个组件的 Prop 的组件

javascript - React 中复选框 Sum 的组件