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

React应用报错Uncaught TypeError: useSelector is not a function求助

问题解决:Uncaught TypeError: useSelector is not a function

核心问题是你用require导入模块时,没有正确获取命名导出的成员。像useSelector、useMemo以及react-router-dom、MUI的组件都是命名导出,不是默认导出,直接赋值给变量会拿到整个模块对象,调用的时候自然不是函数。

修复步骤

所有命名导出的模块,改用解构方式从require返回的对象中提取成员:

修正后的导入代码

const { BrowserRouter, Navigate, Routes, Route } = require('react-router-dom');
const HomePage = require ('scenes/homePage');
const LoginPage = require ('scenes/loginPage');
const ProfilePage = require ('scenes/ProfilePage');
const { useMemo } = require ('react');
const { useSelector } = require ('react-redux');
const { CssBaseline, ThemeProvider } = require ('@mui/material');
const createTheme = require ('@mui/material/styles');
const themeSettings = require ('./theme');

完整修复后的App.js

const { BrowserRouter, Navigate, Routes, Route } = require('react-router-dom');
const HomePage = require ('scenes/homePage');
const LoginPage = require ('scenes/loginPage');
const ProfilePage = require ('scenes/ProfilePage');
const { useMemo } = require ('react');
const { useSelector } = require ('react-redux');
const { CssBaseline, ThemeProvider } = require ('@mui/material');
const createTheme = require ('@mui/material/styles');
const themeSettings = require ('./theme');


function App() {
  const mode = useSelector((state) => state.mode);
  const theme = useMemo(() => createTheme(themeSettings(mode)), [mode]);
  const isAuth = Boolean(useSelector((state) => state.token));

  return (
    <div className="app">
      <BrowserRouter>
        <ThemeProvider theme={theme}>
          <CssBaseline />
          <Routes>
            <Route path="/" element={<LoginPage />} />
            <Route
              path="/home"
              element={isAuth ? <HomePage /> : <Navigate to="/" />}
            />
            <Route
              path="/profile/:userId"
              element={isAuth ? <ProfilePage /> : <Navigate to="/" />}
            />
          </Routes>
        </ThemeProvider>
      </BrowserRouter>
    </div>
  );
}

export default App;

额外建议

如果你的项目支持ES6语法,建议直接使用import语法,更清晰不易出错:

import { BrowserRouter, Navigate, Routes, Route } from 'react-router-dom';
import HomePage from './scenes/homePage';
import LoginPage from './scenes/loginPage';
import ProfilePage from './scenes/ProfilePage';
import { useMemo } from 'react';
import { useSelector } from 'react-redux';
import { CssBaseline, ThemeProvider } from '@mui/material';
import createTheme from '@mui/material/styles';
import themeSettings from './theme';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:00:54