React 传递函数到子组件
React Pass function to child component
我想将函数传递给子组件,但出现此错误。
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 中引入的。因此,将函数从父级传递给子级的正确方法是什么?
您缺少对子组件的绑定。
this.props.passedFunction.bind(this)
您可以使用箭头函数来定义您的方法,而不是必须在父函数的构造函数中绑定您的函数Class,这样它就可以使用箭头函数进行词法绑定
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}/>
}
}
我发现出了什么问题。这是因为react-grid-layout。
我必须将其余属性传递给 child.
class Child extends Component {
render() {
var { passedFunction, ...otherProps } = this.props;
return (
<div onClick={passedFunction} {...otherProps}></div>
);
}
}
如果你能像这样绑定这个函数就可以了
class Parent extends Component {
passedFunction = () => {};
render() {
<Child passedFunction={this.passedFunction} />;
}
}
class Child extends Component {
render() {
<div onClick={this.props.passedFunction} />;
}
}
我想将函数传递给子组件,但出现此错误。
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 中引入的。因此,将函数从父级传递给子级的正确方法是什么?
您缺少对子组件的绑定。
this.props.passedFunction.bind(this)
您可以使用箭头函数来定义您的方法,而不是必须在父函数的构造函数中绑定您的函数Class,这样它就可以使用箭头函数进行词法绑定
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}/>
}
}
我发现出了什么问题。这是因为react-grid-layout。 我必须将其余属性传递给 child.
class Child extends Component {
render() {
var { passedFunction, ...otherProps } = this.props;
return (
<div onClick={passedFunction} {...otherProps}></div>
);
}
}
如果你能像这样绑定这个函数就可以了
class Parent extends Component {
passedFunction = () => {};
render() {
<Child passedFunction={this.passedFunction} />;
}
}
class Child extends Component {
render() {
<div onClick={this.props.passedFunction} />;
}
}