在 Redux 状态中存储外部提供的函数的替代方法是什么

What is an alternative to storing externally provided functions in Redux state

背景

我正在创建某种 React 布局库,将其当前状态存储在 Redux 存储中。 该库不仅仅是一种样式,它具有某些(对于这个问题无关紧要的)功能。

但是,由于它是一个布局库,库的使用者将提供在特定位置呈现的内容。

库将通过单个切片(具有相应的缩减器、操作和选择器)公开,消费者应该简单地将其注入其根缩减器。

当前实施

目前,库知道要渲染什么的方式是由提供渲染功能的消费者。

import { register } from "layouting-lib"
// ... other imports

function CustomContent() {
  return <div> Some consumer-determined content </div>
}

// and then the consumer registers this with the library's (redux) store

dispatch(
    // register is an action creator
    register("apn-container", () => <CustomContent />)
)

这样库就知道消费者想要 <CustomContent /> 组件呈现到 apn-container 中(那是什么并不重要)。

❓问题

如您所知,Redux documentation 表示不应在状态(或动作)中使用函数,因为它们不可序列化。

那么,我还可以采取什么其他方法让我的库 记住 HOW 在进行布局时呈现内容,这样我就可以正确使用redux 提供的好东西(devtools 的历史对我来说最重要)?

我找到的解决方案的提示基本上在 Redux 文档本身中。

他们建议拦截中间件中的不可序列化数据并将其从操作中删除这样 reducer 中就没有任何不可序列化的东西了。

就我而言,如果这些渲染函数驻留在中间件中就完全没问题。 register 操作将抓取函数,将其存储在中间件中并在没有它的情况下转发操作。

而且由于所有 registers 无论如何都应该发生在应用程序的第一次渲染之前,它甚至可以与 redux devtools 一起工作。