Javascript 如何在类之外调用React组件的方法?
我的React单页应用程序中有一个模式。我制作了一个modal的类组件,并在页面上的某个位置呈现它。我需要从这个应用程序的许多其他页面调用它。 我的模态类: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
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!