Javascript 反应:如何激发父组件方法?
如何从组件访问此组件所有者的方法 也就是说,(可能)您需要获取一个指向元素所有者的指针,并且已经通过该指针调用了该方法 例如: 组成部分#1Javascript 反应:如何激发父组件方法?,javascript,reactjs,react-native,react-redux,react-bootstrap,Javascript,Reactjs,React Native,React Redux,React Bootstrap,如何从组件访问此组件所有者的方法 也就是说,(可能)您需要获取一个指向元素所有者的指针,并且已经通过该指针调用了该方法 例如: 组成部分#1 类MyReport扩展组件{ 我的_方法(){} render(){ 返回( ); } } 和组件#2 类MyElement扩展组件{ 建造师(道具){ 超级(道具); this.handleClick=this.handleClick.bind(this); } handleClick(事件){ //获取方法所有者的my_方法 log(parent.m
类MyReport扩展组件{
我的_方法(){}
render(){
返回(
);
}
}
和组件#2
类MyElement扩展组件{
建造师(道具){
超级(道具);
this.handleClick=this.handleClick.bind(this);
}
handleClick(事件){
//获取方法所有者的my_方法
log(parent.my_方法());
}
render(){
回程压力机;
}
}
如果您正在寻找如何调用父组件的方法,只需通过子组件的道具将其传递:
组成部分#1
类MyReport扩展组件{
我的方法(){
}
render(){
返回(
);
}
}
组成部分#2
类MyElement扩展组件{
建造师(道具){
超级(道具);
this.handleClick=this.handleClick.bind(this);
}
handleClick(事件){
//获取方法所有者的my_方法
console.log(this.props.methodFromParent);
}
render(){
返回(
按
);
}
}
尽管如此,用
MyReport
包装MyElement
似乎是你在写这个问题时犯的一个错误。如果你想知道如何调用父组件的方法,你只需通过子组件的道具传递它:
组成部分#1
类MyReport扩展组件{
我的方法(){
}
render(){
返回(
);
}
}
组成部分#2
类MyElement扩展组件{
建造师(道具){
超级(道具);
this.handleClick=this.handleClick.bind(this);
}
handleClick(事件){
//获取方法所有者的my_方法
console.log(this.props.methodFromParent);
}
render(){
返回(
按
);
}
}
虽然,您在编写此问题时使用
MyReport
包装MyElement
似乎是一个错误。将myu方法作为道具从家长传递给孩子,然后您就可以访问它了。它是React.passmy_method
中最基本的概念,作为一个道具,从父对象传递给子对象,然后您就可以访问它。这是React中最基本的概念。这个选项确实是我问题的解决方案,但是在没有明确的所有者指示的情况下,是否可以这样做<代码>
而不是
在这种情况下,不可以。您可以使用高阶组件包装MyElement,但组合应该始终是您的思维方式。这里提出了一个很好的观点:这个选项确实是我问题的一个解决方案,但是在没有明确的所有者指示的情况下,有可能做到吗<代码>而不是
在这种情况下,不可以。您可以使用高阶组件包装MyElement,但组合应该始终是您的思维方式。这里提出了一个很好的观点:
class MyReport extends Component {
my_method() {}
render() {
return (
<MyReport>
<MyElement />
</MyReport>
);
}
}
class MyElement extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick(event) {
// GET METHOD my_method OF OWNER
console.log(parent.my_method());
}
render() {
return <Button onClick={this.handleClick}>Press</Button>;
}
}