Javascript Redux action creator getting“;TypeError:dispatch(…)不是函数;(附代码)?
你知道为什么我的listEventsActionCreator函数调用“dispatch(listEventsRequestedAction())”时会出现以下“dispatch不是函数”错误吗 如果我在分派之后注释掉这个方法中的行,它实际上会工作,这很奇怪 使用react create应用程序,使用redux、typescript和thunk 错误: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
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))
})
}
}