将函数传递给子组件

新手上路,请多包涵

我想将一个函数传递给一个子组件,但我收到了这个错误。

Invalid value for prop passedFunction on <div> tag.

 class Parent extends Component {
    passedFunction(){}
    render() {
      <Child passedFunction={this.passedFunction}/>
    }
}

class Child extends Component {
    render() {
        <div onClick={this.props.passedFunction}></div>
    }
}

基本上我正在尝试做的事情。

var ReactGridLayout = require(‘react-grid-layout’);

 var MyFirstGrid = React.createClass({
passedFunction:function(){}
  render: function () {
    return (
      <ReactGridLayout className="layout" cols={12} rowHeight={30} width={1200}>
        <div key="a" data-grid={{x: 0, y: 0, w: 1, h: 2, static: true}}>a</div>
        <div key="b" data-grid={{x: 1, y: 0, w: 3, h: 2, minW: 2, maxW: 4}}>b</div>
        <div key="c" data-grid={{x: 4, y: 0, w: 1, h: 2}} passedFunction={this.passedFunction}>c</div>
      </ReactGridLayout>
    )
  }
});

它似乎是在 React v16 中引入的。因此,将函数从父级传递给子级的正确方法是什么?

原文由 Lun Zhang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 980
2 个回答

我发现出了什么问题。这是因为 react-grid-layout。我必须将其余的属性传递给孩子。

 class Child extends Component {
    render() {
        var { passedFunction, ...otherProps } = this.props;
        return (
            <div onClick={passedFunction} {...otherProps}></div>
        );
    }
}

原文由 Lun Zhang 发布,翻译遵循 CC BY-SA 3.0 许可协议

不必在父类的构造函数中绑定您的函数,您可以使用箭头函数来定义您的方法,以便使用箭头函数对其进行词法绑定

class Child extends Component {
    render() {
        <div onClick={this.props.passedFunction}></div>
    }
}

class Parent extends Component {
    passedFunction = () => {}
    render() {
      <Child passedFunction={this.passedFunction}/>
    }
}

考虑到 Javascript 的旧版本支持:

 class Child extends Component {
    render() {
        <div onClick={this.props.passedFunction}></div>
    }
}

class Parent extends Component {
    constructor() {
        this.passedFunction = this.passedFunction.bind(this)
    }

    passedFunction() {}
    render() {
      <Child passedFunction={this.passedFunction}/>
    }
}

原文由 Benjamin Charais 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进