当前
你好,世界!
你好火星!
反应脚本:
class App extends Component {
parentFunction = (optional_callback, variable_defined_in_child) => {
console.log("hello " + variable_defined_in_child);
if (optional_callback) {optional_callback()};
}
myCallback = () => {
console.log("hello mars!");
}
render () {
<ChildComponent
myFunction = {this.parentFunction.bind(this, myCallback)}
/>
}
}
const ChildComponent = props => {
const newVariable = "world!";
props.myFunction(newVariable);
}
问题
如果未提供回调,则期望收到控制台消息:
你好,世界!
但是相反,variable_defined_in_child
被放置在optional_callback
的位置,并且功能失败。
问题
是否可以从子组件访问props.myFunction
的绑定变量,检查其是否具有回调,如果没有,则提供为null
?
答案 0 :(得分:1)
您可以将parentFunction
更改为返回另一个函数的函数。 (如果您不熟悉此概念,可能会很复杂,但是请放心。)
想象parentFunction
是:
parentFunction = optional_callback => variable_defined_in_child => {
console.log("hello " + variable_defined_in_child);
if (optional_callback) {
optional_callback();
}
};
然后将其通过以下方式传递给ChildComponent
:
<ChildComponent
myFunction={this.parentFunction.bind(this, this.myCallback)()}
/>
那么这是怎么回事?
您将parentFunction
与this
绑定,并将this.myCallback
作为参数传递给它,然后调用。
这将返回一个函数,该函数接受单个参数variable_defined_in_child
来执行您想要的功能:console.log
等等……同时可以访问this.myCallback
而不将其作为参数传递。
如果您没有将this.myCallback
传递给parentFunction
,一切都会正常进行。
这是工作中的CodeSandbox
您的代码将是:
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
parentFunction = optional_callback => variable_defined_in_child => {
console.log("hello " + variable_defined_in_child);
if (optional_callback) {
optional_callback();
}
};
myCallback = () => {
console.log("hello mars!");
};
render() {
return (
<ChildComponent
myFunction={this.parentFunction.bind(this, this.myCallback)()}
/>
);
}
}
const ChildComponent = props => {
const newVariable = "world!";
props.myFunction(newVariable);
return <div />;
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);