You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用React Router时为React应用配置easy-peasy store的正确方法

解决easy-peasy中useStoreState触发"Cannot read properties of undefined (reading 'subscribe')"错误

你遇到的问题核心是useStoreState必须在StoreProvider包裹的组件内部使用,你的App组件里useStoreState写在了StoreProvider的外层,组件渲染时还没注入store上下文,自然找不到subscribe方法。

修正步骤:

把需要访问store状态的逻辑移到StoreProvider内部的组件中,比如单独抽离路由处理组件:

// 你的store定义保持不变
const store = createStore({
    user: { loggedIn: false },
    adduser: action((state, payload) => {
      state.user = { loggedIn: true, ...payload }
    }),
})

// App组件只负责包裹Provider和Router
const App = () => {
  return (
    <StoreProvider store={store}>
      <BrowserRouter>
        <RouteHandler />
      </BrowserRouter>
    </StoreProvider>
  )
}

// 抽离路由处理组件,放在Provider内部才能正常使用useStoreState
const RouteHandler = () => {
  const user = useStoreState((state) => state.user)
  
  return (
    <Routes>
      <Route path="/" element={!user.loggedIn ? <LoginScreen /> : <Dashboard />} />
      <Route path="/sign-up" element={<SignupScreen />} />
    </Routes>
  )
}

关键说明:

  • 所有easy-peasy的hooks(useStoreState、useStoreActions等)都依赖StoreProvider提供的上下文,必须在它的子组件中调用。
  • 拆分组件不仅解决了当前错误,也让代码结构更清晰,后续维护路由逻辑更方便。

内容的提问来源于stack exchange,提问作者James Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:03:31