Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS在两层typescript上调用父方法_Javascript_Reactjs_Typescript_Methods_Callback - Fatal编程技术网

Javascript ReactJS在两层typescript上调用父方法

Javascript ReactJS在两层typescript上调用父方法,javascript,reactjs,typescript,methods,callback,Javascript,Reactjs,Typescript,Methods,Callback,我在两层调用父方法时遇到了一个问题。 它要么什么也不做,要么说它不是一个函数。下面是我的子组件: class Child extends React.Component { render() { //return some awesome HTML, that at some point calls doStuff } doStuff() { //do some stuff this.props.parentState.notifyParent(); } } 我的父组件现在正在进行一些条

我在两层调用父方法时遇到了一个问题。 它要么什么也不做,要么说它不是一个函数。下面是我的子组件:

class Child extends React.Component {
render() { //return some awesome HTML, that at some point calls doStuff }

doStuff() {
 //do some stuff
 this.props.parentState.notifyParent();
}
}
我的父组件现在正在进行一些条件操作,因此它看起来如下所示:

class Parent extends React.Component {
constructor(props : any) {
        super(props);
        this.state = {
            //setSomeProps
            updateParent: this.updateParent
        };
    }
    determineUsedComponent(props: any) {
        //some conditions
            return <Child parentState={props}/>
    }   
    updateParent() {
        console.log("Update parent");
    }
    render() {
        return (<this.determineUsedComponent props={this.state}/>)
    }
}
return <Child parentUpdate={()=>this.parentUpdate}/> 
而父组件则具有具有以下签名的DetermineUserComponent方法:

determineUsedComponent(props: Any, updateParent: Function) {}
它被称为:

<this.determineUsedComponent props={this.state} updateParent={this.updateParent}/>

然后,如果我尝试在DetermineUserComponent方法内部将其作为属性插入:

return <Child parentUpdate={this.parentUpdate}/>
返回
它再次抛出异常“this.props.notifyParent()不是函数”。 相反,如果我这样写:

class Parent extends React.Component {
constructor(props : any) {
        super(props);
        this.state = {
            //setSomeProps
            updateParent: this.updateParent
        };
    }
    determineUsedComponent(props: any) {
        //some conditions
            return <Child parentState={props}/>
    }   
    updateParent() {
        console.log("Update parent");
    }
    render() {
        return (<this.determineUsedComponent props={this.state}/>)
    }
}
return <Child parentUpdate={()=>this.parentUpdate}/> 
返回此.parentUpdate}/>
没有错误,只是什么也没发生。(也没有日志。) 我非常无知,现在尝试了所有可能的方法来编写函数并将其交给child,但有些人给出了错误(两个以上),大多数人根本没有做任何事情。 有什么想法吗? 也许值得一提:子组件是用纯JS编写的,而父组件是用Typescript编写的。

您试过了吗

return <Child parentUpdate={()=>this.parentUpdate()}/> 
返回此.parentUpdate()}/>

我没有用两层实现它。 然而,我找到了另一个解决方案:
您可以将条件呈现从“determineComponent”-方法直接移动到render()-方法中,然后直接输入父函数(语法如DarioRega上面所写)。那就行了。

我不会说谎,这是一个扭曲的模式!虽然我不知道原因,所以我不能真正判断,虽然可能的原因是我需要条件检查,应该根据父组件中的一些引用状态使用哪个组件。但愿我也能把这种方法放在这两者之间。这给了我一个想法,降低可读性,但删除一层。。。不过,如果有理由让它使用两层的话,它还是很好的D