ReactJS两个组件进行通信

JavaScript

L路易

2020-03-10

我刚开始使用ReactJS,但对我遇到的问题有些困惑。

我的应用程序本质上是一个带有过滤器的列表和一个用于更改布局的按钮。目前我使用的三个组成部分:<list />< Filters /><TopBar />,现在很明显,当我更改设置,在< Filters />我想引起一些方法<list />来更新我的看法。

如何使这三个组件相互交互,或者我需要可以对其进行更改的某种全局数据模型?

第436篇《ReactJS两个组件进行通信》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

4个回答
Mandy逆天 2020.03.10

奇怪的是没有人提到mobx这个想法类似于redux如果我有一个已订阅了多个组件的数据,则可以使用此数据来驱动多个组件。

前端卡卡西米亚 2020.03.10

以下代码可帮助我设置两个同级之间的通信。设置是在render()和componentDidMount()调用期间在其父级中完成的。它基于https://reactjs.org/docs/refs-and-the-dom.html 希望对您有所帮助。

class App extends React.Component<IAppProps, IAppState> {
    private _navigationPanel: NavigationPanel;
    private _mapPanel: MapPanel;

    constructor() {
        super();
        this.state = {};
    }

    // `componentDidMount()` is called by ReactJS after `render()`
    componentDidMount() {
        // Pass _mapPanel to _navigationPanel
        // It will allow _navigationPanel to call _mapPanel directly
        this._navigationPanel.setMapPanel(this._mapPanel);
    }

    render() {
        return (
            <div id="appDiv" style={divStyle}>
                // `ref=` helps to get reference to a child during rendering
                <NavigationPanel ref={(child) => { this._navigationPanel = child; }} />
                <MapPanel ref={(child) => { this._mapPanel = child; }} />
            </div>
        );
    }
}
L前端 2020.03.10

如果您想探索组件之间进行通信的选项,并且感觉越来越难了,那么您可以考虑采用一种良好的设计模式:Flux

它只是规则的集合,这些规则定义了如何存储和更改应用程序范围内的状态以及如何使用该状态来呈现组件。

Flux实现有很多,Facebook的官方实现就是其中之一。尽管它被认为是包含大多数样板代码的代码,但是由于大多数事情都是显式的,因此更易于理解。

其他一些替代产品都是惊讶 fluxxor 变化无常的终极版

蛋蛋TomItachi 2020.03.10

我已经看到问题已经得到解答,但是如果您想了解更多详细信息,组件之间总共有3种通信情况

  • 案例1:父母与孩子之间的沟通
  • 案例2:孩子与父母的沟通
  • 情况3:不相关的组件(任何组件到任何组件)通信

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android