如何将我的库中的Redux容器连接到使用我的库的应用程序所拥有的存储?

如何将我的库中的Redux容器连接到使用我的库的应用程序所拥有的存储?,redux,Redux,我正在创建一个使用Redux进行状态管理的npm模块。我的模块将是一个库,可在属于不同客户的两个应用程序之间重复使用。我希望客户端应用程序将维护我的库也将使用的单个存储 问题是关于我需要传递到库中的connect()的mapstatetops函数。我不知道我的库的用户把我的还原器和状态树放在了哪个键上 我可以做出一个合理的猜测,比如我图书馆的名称。但是,这似乎不是一种稳健的方法,因为1/用户可能正在使用我的密钥进行其他操作,2/状态树中可能只有我的库的一个实例(我可以想到一些场景,其中我需要多个

我正在创建一个使用Redux进行状态管理的npm模块。我的模块将是一个库,可在属于不同客户的两个应用程序之间重复使用。我希望客户端应用程序将维护我的库也将使用的单个存储

问题是关于我需要传递到库中的
connect()
mapstatetops
函数。我不知道我的库的用户把我的还原器和状态树放在了哪个键上

我可以做出一个合理的猜测,比如我图书馆的名称。但是,这似乎不是一种稳健的方法,因为1/用户可能正在使用我的密钥进行其他操作,2/状态树中可能只有我的库的一个实例(我可以想到一些场景,其中我需要多个实例)

下面是一个简单的问题示例。我可以创建一个登录npm模块,我希望将其连接到我的存储和视图层次结构中。我不知道应用程序存储中的路径,因此????在MapStateTops中。有什么好办法来处理这种情况吗

// node_modules/my-company-logon/

const LoginScreen = ({ username, failureReason }) => (
    // my presentation logic
);

export default connect(
  username: state.????.lastSessionUsername,
  failureReason: state.????.failureReason
)(LoginScreen); 

export const logonReducer(state, action) => { /* reducer logic */  }




// my-customer/app.js

import LogonScreen, { logonReducer } from 'my-company-logon';

let store = createStore(combineReducers({
    someUnexpectedPath: logonReducer
}))
编辑:

我通过包装react redux的connect函数解决了这个问题。模块的根组件具有选择器的上下文,这些选择器可以从安装库的位置读取数据

export default connect(
    (state, selectors, actionCreators) => ({
        username: selectors.getUsername(state),
        loginFailureReason: selectors.getLogonFailureReason(state)
    })
)(LoginScreen)

我见过的依赖Redux的库使用的最常见的方法是要求用户在已知的顶级状态键处添加库的缩减器,如
combinereducer({myLib:myLibReducer})
。这是可行的,但显然有一定的局限性


另一个选项是提供一些初始化函数,允许用户传入密钥名,并让您的lib使用该函数来适当设置选择器。您可能想通读我的部分中关于选择器封装的一些文章,特别是Randy Coulman关于选择器封装的文章。最后,您可以在源代码中浏览我列出的一些代码。

我见过的依赖Redux的库使用的最常用方法是要求用户在已知的顶级状态键处添加库的reducer,如
组合reducer({myLib:myLibReducer})
。这是可行的,但显然有一定的局限性


另一个选项是提供一些初始化函数,允许用户传入密钥名,并让您的lib使用该函数来适当设置选择器。您可能想通读我的部分中关于选择器封装的一些文章,特别是Randy Coulman关于选择器封装的文章。最后,您还可以浏览我列出的一些源代码。

谢谢您的回复。我正在尝试实现模块的导入、配置和使用工作流。感谢您的评论,我找到了一个解决方案,在导入和配置之后创建选择器。唯一的问题是样板文件,因为连接的组件在导出时是双重修饰的。我包装了react-redux的连接函数,以便在某些上下文中传递给我的库。我编辑了我的问题谢谢你的回答。我正在尝试实现模块的导入、配置和使用工作流。感谢您的评论,我找到了一个解决方案,在导入和配置之后创建选择器。唯一的问题是样板文件,因为连接的组件在导出时是双重修饰的。我包装了react-redux的连接函数,以便在某些上下文中传递给我的库。我编辑了我的问题