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

触发loginToSpotify()时出现TypeError: login不是函数求助

问题排查:调用loginToSpotify()时触发TypeError

触发loginToSpotify()函数时出现如下错误:

TypeError: _services_login__WEBPACK_IMPORTED_MODULE_0__.login is not a function
    at loginToSpotify (Login.js:6:1)
    at onClick (Login.js:15:1)
    at HTMLUnknownElement.callCallback (react-dom.development.js:4164:1)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:4213:1)
    at invokeGuardedCallback (react-dom.development.js:4277:1)
    at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:4291:1)
    at executeDispatch (react-dom.development.js:9041:1)
    at processDispatchQueueItemsInOrder (react-dom.development.js:9073:1)
    at processDispatchQueue (react-dom.development.js:9086:1)
    at dispatchEventsForPlugins (react-dom.development.js:9097:1)

相关代码文件:

index.js

import ReactDOM from 'react-dom/client'
import App from './App'

ReactDOM.createRoot(document.getElementById('root')).render(<App />)

App.js

import Login from './pages/Login'

const App = () => {
  return (
    <>
      <Login />
    </>
  )
}

export default App

Login.js

import loginService from '../services/login'

const Login = () => {
  const loginToSpotify = async () => {
    try {
      const response = await loginService.login()
    } catch (err) {
      console.log(err)
    }
  }

  return (
    <>
      <div>
        <button onClick={() => loginToSpotify()}>Login using Spotify</button>
      </div>
    </>
  )
}

export default Login

login.js(services目录下)

import axios from 'axios'

const login = async () => {
  const response = await axios.post('/login')

  return response.data
}

export default { login }

问题原因与修复方案

核心排查点:导入路径正确性

首先确认Login.js中../services/login的路径是否准确:

  • 若Login.js位于src/pages/Login.js,则../services/login应指向src/services/login.js,检查文件名拼写、大小写(部分系统区分文件名大小写)是否完全匹配,避免因路径错误导致导入的模块不符合预期。

修复方案二选一

方案1:改用命名导出/导入

修改services/login.js的导出方式为命名导出:

import axios from 'axios'

export const login = async () => {
  const response = await axios.post('/login')
  return response.data
}

然后在Login.js中改为命名导入并直接调用:

import { login } from '../services/login'

const loginToSpotify = async () => {
  try {
    const response = await login()
  } catch (err) {
    console.log(err)
  }
}

方案2:验证默认导出结构

如果坚持使用默认导出对象,可先在Login.js中打印导入的模块确认结构:

import loginService from '../services/login'
console.log(loginService) // 检查输出是否包含login方法

若输出无login方法,说明路径错误或文件未正确编译,重新核对文件位置后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:54:26