如何将React组件库接入Redux、Router等应用上下文?
问题:组件库无法访问宿主应用的Redux/React Router上下文?
我维护多个共享大量组件的项目,因此搭建了一个公共组件库。其中部分组件需要依赖Redux或React Router的能力,原本以为只要宿主应用用Provider(Redux)和BrowserRouter(React Router)把组件库的组件包裹起来,组件就能自动访问对应的上下文,但实际运行时却出了问题。
宿主应用代码示例
import { Provider } from 'react-redux' import store from 'store' import { MyLibComponent } from 'myLibComponent' <Provider store={store}> <BrowserRouter> <MyLibComponent /> </BrowserRouter> </Provider>
组件库组件代码示例
import { useSelector } from 'react-redux'; import { useLocation } from 'react-router-dom'; const MyLibComponent = () => { const reducer = useSelector(state => state.reducer) const location = useLocation() // 组件逻辑... }
当前问题
运行时收到错误:MyLibComponent无法访问Redux store,useLocation返回undefined。目前我只能通过props传递store给需要Redux的组件,或是把React Router的相关方法作为props传入组件来解决,但我想知道:
- 有没有办法让组件库直接对接宿主应用的Redux/React Router上下文?
- 为什么当前的写法无法实现上下文共享?
我查过相关讨论,提到Material-UI通过将主题相关依赖设为开发依赖,实现了组件库与宿主应用的主题上下文共享,但我把Redux和React Router设为组件库的开发依赖后,问题依然存在。
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

