【问题标题】:Get the component of a rendered element获取渲染元素的组件
【发布时间】:2017-03-12 19:41:18
【问题描述】:

目前,我正在使用 React 制作模态系统。 所以我在侧边栏中有一个按钮,而我的模态是正文中的一个 div。

我有两个组件在我的应用程序主要组件的渲染函数中呈现:

  • 我的模式
  • MyModalOpenButton

这是我需要的: 当 MyModalOpenButton 的 onClick 事件被触发时,我需要执行一个存储在 MyModal 组件中的函数。

所以我基本上需要将 MyModal 的 ref 存储在一个 var 中。

我该怎么做?


代码:

import * as ReactDOM from "react-dom";
import * as React from "react";

import { MyModal } from "./component/modal/my-modal";
import { SettingsButtons } from "./component/settings-buttons";
import { CustomComponent } from "./custom-component";

class App extends CustomComponent<{}, {}>{
    constructor() {
        super();
    }

    render() {
        return (
            <div>
                <div className="sidebar">
                    <ul>
                        <li>
                            1
                        </li>
                        <li>
                            2
                        </li>
                        <li>
                            3
                        </li>
                    </ul>
                    <SettingsButtons />
                </div>
                <div className="mainContent">

                </div>
                <footer>TODO</footer>
                <MyModal />
            </div>
        );
    }
}

const app: App = ReactDOM.render(<App />, document.querySelector("#root")) as App;

和

import * as ReactDOM from "react-dom";
import * as React from "react";

import { CustomComponent } from "./../../custom-component";
import { ButtonComponent } from "./button";

export class MyModalOpenButton extends ButtonComponent<{}, {}> {
    constructor() {
        super();
    }

    render() {
        return (
            <li id="open-button" onClick={this.onClick}>
                <i className="fa fa-plus" aria-hidden="true"></i>
            </li>
        );
    }
    onClick(event: React.MouseEvent<HTMLElement>) {
        // Should open the modal
    }
}

【问题讨论】:

标签: javascript reactjs typescript components element


【解决方案1】:

你没有分享你的代码,所以我不能给你一个具体匹配你的情况的答案,但总的来说:

class MyModal extends React.Component<any, any> {
    public render() {
        ...
    }

    public onButtonClick() {
        ...
    }
}

interface MyModalOpenButtonProps {
    onClick: () => void;
}
class MyModalOpenButton extends React.Component<MyModalOpenButtonProps, any> {
    public render() {
        return <button onClick={ this.props.onClick } />
    }
}

class Main extends React.Component<any, any> {
    private myModal: MyModal;

    public render() {
        return (
            <div>
                <MyModalOpenButton onClick={ this.onButtonClick.bind(this) } />
                <MyModal ref={ modal => this.myModal = modal } />
            </div>
        );
    }

    private onButtonClick() {
        this.myModal.onButtonClick();
    }
}

【讨论】:

  • 这或多或少是我想要做的。但是在这一点上,我最好删除按钮组件并将其放在主渲染器中......有没有办法从按钮组件访问模态引用(作为主要组件属性)?有类似的东西:/* Function in the button component */ onClick(event: React.MouseEvent&lt;HTMLElement&gt;) { mainComponent.myModal.display() /* Or even this:*/ myModal.display() } 编辑:抱歉缩进不好.....
  • 我不确定你的意思。您问题中的代码似乎不正确。你有一个 MyModalOpenButton 类,但在 App 中你没有使用它,你正在使用 SettingsButtons 和 MyModal 代码不包括在内。注释中的代码很难阅读。请使用相关代码编辑您的问题并在您更改后在此处发表评论,然后我将能够查看。谢谢
猜你喜欢
  • 2015-01-04
  • 2023-03-23
  • 2010-10-06
  • 2020-04-14
  • 2021-12-09
  • 2018-03-07
  • 2019-03-15
相关资源
最近更新 更多