I want to pass a function to a child component but I'm getting this error.
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> } }
Basically what I'm trying to do.
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> ) } });
It seems it was introduced in React v16. Therefore, what is the correct way to pass a function from parent to child?
Define the function in the parent component. Pass it as a prop to the child component, e.g. <Child handleClick={handleClick} /> . Use the function in the child component.
For passing the data from the child component to the parent component, we have to create a callback function in the parent component and then pass the callback function to the child component as a prop. This callback function will retrieve the data from the child component.
A Function as child component is a pattern that lets you pass a render function to a component as the children prop so you can change what you can pass as children to a component.
Instead of having to bind your function in the constructor of the parent Class, you can use an arrow function to define your method so it is lexically bound using an arrow function
class Child extends Component { render() { <div onClick={this.props.passedFunction}></div> } } class Parent extends Component { passedFunction = () => {} render() { <Child passedFunction={this.passedFunction}/> } }
To Account for older version support of 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}/> } }
You are missing bind on the Child component.
this.props.passedFunction.bind(this)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With