如何在电子的多个窗口之间共享状态(react)?

IT技术 javascript reactjs electron
2021-05-23 19:17:05

我正在开发一个对 UI 和电子做出react的桌面应用程序。

所以,现在,我正在从服务器获取数据并使用 React 的 Context API 将其保存在状态中以更新 UI。

我在渲染器进程中保持状态和添加、删除和更新状态的函数,并且使用 IPC 我通过主进程(应该是这样)在渲染器进程之间共享数据。

但是随着应用程序的扩展,我需要一个更好的方法。类似于中央国家的东西(如果那是一回事)。

PS 如果有任何实时数据库(例如 rxdb),我可以将数据库与 Electron 应用程序一起使用吗?

2个回答

我遇到了完全相同的问题,我使用了电子版(https://github.com/hardchor/electron-redux)。我也在我的 UI 中使用了 react。

拥有“主状态”的最佳方法是使用React-Redux

Redux 可以做 Context 做的事情等等。它还具有许多用于侦听来自服务器的实时更新的库。当时最流行的是React-Redux-Firebase,它将您的 Reduxstore与您的 Firebase 数据库连接起来

大多数开发人员都同意 Redux 需要一些时间来设置的事实,但绝对值得投入时间。我个人使用过 React-Redux-Firebase,我可以向您保证,所有实时更新都将在 250 毫秒store出现在您的 Redux中。

Firebase 在一定程度上也是免费的(查看Firebase 定价)。

为了state在组件中访问您的 Redux ,您需要执行 3 个步骤:

步骤 1:创建一个mapStateToProps常量,其中包含您想要从store.

const mapStateToProps = state => ({
    customers: state.customers,
    books: state.books
})

第 2 步:创建一个actions常量,其中包含您在一个actions.js或类似文件中拥有的并且您想要调用的任何函数

import { fetchCustomers } from './actions.js'

const actions = {
    fetchCustomers
}

请记住,任何从您的 API 获取的数据都可以(并且应该)从那里完成。

第 3 步:使用 Redux 的connect函数导出您的组件,包括 yourmapStateToPropsactionsconsts。

export default connect(mapStateToProps, actions)(myComponent);

Redux 在单个 stackoverflow 答案中解释起来相当复杂,因此我建议您查看文档或遵循教程。您应该能够在开发的第一天或第二天弄清楚所有事情。这绝对值得花时间。