Javascript Redux action creator getting“;TypeError:dispatch(…)不是函数;(附代码)?

Javascript Redux action creator getting“;TypeError:dispatch(…)不是函数;(附代码)?,javascript,reactjs,redux,redux-thunk,Javascript,Reactjs,Redux,Redux Thunk,你知道为什么我的listEventsActionCreator函数调用“dispatch(listEventsRequestedAction())”时会出现以下“dispatch不是函数”错误吗 如果我在分派之后注释掉这个方法中的行,它实际上会工作,这很奇怪 使用react create应用程序,使用redux、typescript和thunk 错误: TypeError: dispatch(...) is not a function 代码: index.tsx import * as Re

你知道为什么我的listEventsActionCreator函数调用“dispatch(listEventsRequestedAction())”时会出现以下“dispatch不是函数”错误吗

如果我在分派之后注释掉这个方法中的行,它实际上会工作,这很奇怪

使用react create应用程序,使用redux、typescript和thunk

错误:

TypeError: dispatch(...) is not a function
代码:

index.tsx

import * as React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { applyMiddleware, createStore } from 'redux'
import App from './App'
import './index.css'
import rootReducer from './reducers/index'
import registerServiceWorker from './registerServiceWorker'

import { createLogger } from 'redux-logger'
import thunkMiddleware from 'redux-thunk'

const loggerMiddleware = createLogger()
const store = createStore (
  rootReducer,
  applyMiddleware(
    thunkMiddleware, // lets us dispatch() functions
    loggerMiddleware // neat middleware that logs actions
  )
)

render(
  <Provider store={store}>
    <App testStr='test' />
  </Provider>
  ,document.getElementById('root') as HTMLElement
);
registerServiceWorker();
import*作为来自“React”的React
从'react dom'导入{render}
从“react redux”导入{Provider}
从“redux”导入{applyMiddleware,createStore}
从“./App”导入应用程序
导入“./index.css”
从“./reducers/index”导入rootReducer
从“./registerServiceWorker”导入registerServiceWorker
从“redux logger”导入{createLogger}
从“redux thunk”导入thunk中间件
const loggerMiddleware=createLogger()
const store=createStore(
减根剂,
applyMiddleware(
thunkMiddleware,//让我们分派()函数
loggermdleware//记录操作的整洁中间件
)
)
渲染(
,document.getElementById('root')作为HTMLElement
);
registerServiceWorker();

问题在于您遵循的语法。在
分派(listEventsRequestedAction())
之后没有
分号,因为您使用
(API.graphql(graphqlOperation(listEvents)作为承诺)
进行编译时,它被评估为
分派(listEventsRequestedAction())(API.graphql(graphqlOperation(listEvents)作为承诺)
,因此它会给出错误信息

分派(listEventsRequestedAction())
之后添加分号将有效

export const listEventsActionCreator = () => {
    return (dispatch: any) => {
        dispatch(listEventsRequestedAction()); 
        (API.graphql(graphqlOperation(listEvents)) as Promise<any>).then((results:any) => {
            const events = results.data.listEvents.items
            dispatch(listEventsReceivedAction(events))
        }).catch((err:any) => {
            // console.log("ERROR")
            dispatch(listEventsErrorAction(err))
        })
    }
}
export const listentsactioncreator=()=>{
退货(发货:任何)=>{
分派(listEventsRequestedAction());
(API.graphql(graphqlooperation(listEvents))作为承诺)。然后((结果:any)=>{
const events=results.data.listEvents.items
发送(列出接收(事件))
}).catch((错误:任意)=>{
//console.log(“错误”)
调度(ListEventErrorAction(err))
})
}
}
另外,分号在Javascript中不是必需的,不会导致 js错误。但是,如果串联,则可能会导致错误 使用其他脚本


您是如何使用thunk的。第二,您是如何调度此操作的。我们已通过redux中间件设置thunk。如果我拉出“调度(ListEventRequestedAction())”行,则操作创建者的其余部分将工作。还有“调度(ListEventRequestedAction())”似乎它自己就起作用了。按照类似的方法…确实把index.tsx也放在了问题中,如果这有帮助的话。这不是人们面临的一个非常普遍的问题。
import * as React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { applyMiddleware, createStore } from 'redux'
import App from './App'
import './index.css'
import rootReducer from './reducers/index'
import registerServiceWorker from './registerServiceWorker'

import { createLogger } from 'redux-logger'
import thunkMiddleware from 'redux-thunk'

const loggerMiddleware = createLogger()
const store = createStore (
  rootReducer,
  applyMiddleware(
    thunkMiddleware, // lets us dispatch() functions
    loggerMiddleware // neat middleware that logs actions
  )
)

render(
  <Provider store={store}>
    <App testStr='test' />
  </Provider>
  ,document.getElementById('root') as HTMLElement
);
registerServiceWorker();
export const listEventsActionCreator = () => {
    return (dispatch: any) => {
        dispatch(listEventsRequestedAction()); 
        (API.graphql(graphqlOperation(listEvents)) as Promise<any>).then((results:any) => {
            const events = results.data.listEvents.items
            dispatch(listEventsReceivedAction(events))
        }).catch((err:any) => {
            // console.log("ERROR")
            dispatch(listEventsErrorAction(err))
        })
    }
}