Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 如何在类之外调用React组件的方法?_Javascript_Reactjs - Fatal编程技术网

Javascript 如何在类之外调用React组件的方法?

Javascript 如何在类之外调用React组件的方法?,javascript,reactjs,Javascript,Reactjs,我的React单页应用程序中有一个模式。我制作了一个modal的类组件,并在页面上的某个位置呈现它。我需要从这个应用程序的许多其他页面调用它。 我的模态类: class Modal extends React.Component { constructor(props) { super(props); this.state = { modalShow: false, } } setModalShow(state){ this.setState

我的React单页应用程序中有一个模式。我制作了一个modal的类组件,并在页面上的某个位置呈现它。我需要从这个应用程序的许多其他页面调用它。 我的模态类:

class Modal extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      modalShow: false,
    }
  }
  setModalShow(state){
   this.setState({modalShow: state});
  }      
  render(){...}
}
模态的状态我保留在模态类中。我想通过改变模态类外部的状态来显示模态。例如

import Modal from './Modal'
...
Modal.setModalShow(true)

但Modal是一个类,但我需要在类的实例中调用setModalShow。而且我不明白如何以真实的方式做这样的事情。

这种行为需要将该函数作为子属性传递,如下所示:

class Modal extends React.Component {

  constructor(props) {
    super(props);
  }

  setModalShow(state){
   this.props.showModal(true);
  }      

  render(){
    ...
  }
}
无论您在哪里使用模态,都应该有如下显示状态:

class ModalWrapper extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    }
  }

  showModal(state){
    this.setState({modalShow: state});
  }      

  render(){
    return (<Modal showModal={showModal} />);
  }
}
类ModalWrapper扩展React.Component{ 建造师(道具){ 超级(道具); 此.state={ showModal:错误 } } showModal(州){ this.setState({modalShow:state}); } render(){ 返回(); } }
这种行为需要将该函数作为子属性传递,如下所示:

class Modal extends React.Component {

  constructor(props) {
    super(props);
  }

  setModalShow(state){
   this.props.showModal(true);
  }      

  render(){
    ...
  }
}
无论您在哪里使用模态,都应该有如下显示状态:

class ModalWrapper extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    }
  }

  showModal(state){
    this.setState({modalShow: state});
  }      

  render(){
    return (<Modal showModal={showModal} />);
  }
}
类ModalWrapper扩展React.Component{ 建造师(道具){ 超级(道具); 此.state={ showModal:错误 } } showModal(州){ this.setState({modalShow:state}); } render(){ 返回(); } }
您应该将方法
setModalShow
Modal
传递给它的一个子组件,然后子组件将调用
this.props.setModalShow(true)
您应该将方法
setModalShow
Modal
传递给它的一个子组件,然后子组件将调用
this.props.setModalShow(true)

虽然您可以按照其他建议传递一个函数,允许您将方法注册到另一个组件,但这可能不是在组件外部打开模式的“反应”方式(这意味着,我相信,在React中有比这更清晰的方法来书写)。我建议将打开状态作为一个道具,或者在React上下文中保持模态状态(或者甚至将打开函数作为上下文传递,如果其中发生的事情比简单地打开模态多的话),这将允许您避免钻取道具


您可以在React文档中阅读有关上下文API的内容:。请注意,在函数组件中用作钩子要简单得多,但它也适用于类。

正如其他人所建议的,虽然您可以传递一个函数,允许您将该方法注册到另一个组件,但这可能不是“React”在组件外部打开模态的方法(我认为,有一些方法在React中写得比这更清楚)。我建议将打开状态作为一个道具,或者在React上下文中保持模态状态(或者甚至将打开函数作为上下文传递,如果其中发生的事情比简单打开模态更多的话),这将允许您避免支柱钻孔


您可以在React文档中阅读有关上下文API的内容:。请注意,在功能组件中用作挂钩要简单得多,但在类中也可以正常工作。

我决定使用Redux。in描述了我的问题。

我决定使用Redux。in描述了我的问题。

因此,唯一的方法是将状态保持在模态、装备之外嗯?我没有想到这个方法。Thanx!所以唯一的方法就是把状态保持在模态之外,对吗?我没有想到这个方法。Thanx!