- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 redux-thunk
使用异步 Action 创建者。结果也返回给各自的调用者。
function fetchUserName(userId: number): Promise<string> {
return Promise.resolve(`User ${userId}`)
}
function requestUserName(userId: number) {
return (dispatch: Dispatch) => {
return fetchUserName(userId).then(name => {
dispatch({
type: 'SET_USERNAME',
payload: name,
})
})
}
}
function User() {
const dispatch = useDispatch()
useEffect(() => {
dispatch(requestUserName(1))
.then(name => {
console.log(`user name is ${name}`)
})
.catch(reason => {
alert('failed fetching user name')
})
}, [])
}
dispatch
由 useDispatch
返回不被识别为返回 Promise 的函数,因此 TypeScript 认为 Property 'then' does not exist on type '(dispatch: Dispatch<AnyAction>) => Promise<void>'.
. useDispatch
周围创建一个包装器。或重新定义
dispatch
的类型但我不知道这种类型在这种特殊情况下应该是什么样子。
最佳答案
useDispatch
返回 Dispatch
类型 used by Redux ,因此您只能使用它发送标准操作。要同时调度 thunk 操作,请将其类型声明为 ThunkDispatch
(来自 redux-thunk
)。ThunkDispatch
接收存储状态的类型参数,extra thunk args和你的 Action 类型。它允许发送 ThunkAction
,这基本上是requestUserName
的内部函数.
例如,您可以这样键入:
import { ThunkDispatch } from "redux-thunk";
import { AnyAction } from "redux";
type State = { a: string }; // your state type
type AppDispatch = ThunkDispatch<State, any, AnyAction>;
// or restrict to specific actions instead of AnyAction
function User() {
const dispatch: AppDispatch = useDispatch();
useEffect(() => {
dispatch(requestUserName(1))
.then(...) // works now
}, []);
...
}
AppDispatch
也可以是
inferred来自
typeof store.dispatch
的商店:
import thunk, { ThunkDispatch, ThunkMiddleware } from "redux-thunk";
const mw: ThunkMiddleware<State, AnyAction> = thunk;
const dummyReducer = (s: State | undefined, a: AnyAction) => ({} as State);
const store = createStore(dummyReducer, applyMiddleware(mw));
type AppDispatch = typeof store.dispatch // <-- get the type from store
TS Playground sample
关于typescript - 类型安全的 useDispatch 和 redux-thunk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59800913/
可以在 function 或 class 中使用 useDispatch Hook 吗?我不是在谈论功能或类组件。我想从函数/类调度状态更改。 // Example: utils.ts export
我正在尝试使用 react-redux 钩子(Hook),但是我得到了错误: TypeError: (0 , _reactRedux.useDispatch) is not a function 有什
我刚开始学习 Redux,但遇到了问题。 我有 Action : export const getValues = () => async (dispatch) => { try {
我一直在使用钩子(Hook)使用 react-redux,但我只是不明白使用 react-redux useDispatch 与仅来自 store 对象的调度函数相比有什么优势。 在 react-re
当我在 useEffect 中使用 useDispatch 时,它会不断重新加载整个组件 这是我的操作: export const getData = () => dispatch => {
嗨,我正在使用 Jest 和 enzyme 编写功能组件测试。当我模拟单击时,组件的参数(使用 useState 的组件状态)会发生变化。并且当状态发生更改时, useEffect 调用并在 useE
我试图在我的 React Native 应用程序中使用 React-Redux,但不知何故出现了这个问题 error: bundling failed: Error: Unable to resolv
我尝试创建一个 Redux,但当我尝试进行分派(dispatch)时遇到问题,但无法正常工作。 Action 文件,userActions.js: export const setId = () =>
我正在使用 redux-thunk使用异步 Action 创建者。结果也返回给各自的调用者。 function fetchUserName(userId: number): Promise { r
我正在尝试创建一个简单的组件来使用 React Redux Hook useDispatch 调度操作- 我得到一个错误。我已将组件修剪到发生错误的位置。它在调用 useDispatch 函数时发生。
我有一个 React hook 组件,onChange 事件将执行 aync-await 函数和一些调度,在我的模型测试中,如果我放置我的,则不会检测到调用 store.dispatch await
在我的 React 代码库中,我集成了 Redux usign react-redux我正在使用 useDispatch从我的 View 中调度操作的钩子(Hook)。我只有一个问题,我在更新商店后无
创建 React 应用程序时,如果我使用 Hook useSelector ,我需要遵守钩子(Hook)调用规则(只能从功能组件的顶层调用它)。如果我使用 mapStateToProps ,我得到了
我正在尝试通过 useDispatch 方法在 redux 中更新我的商店,但我收到这样的消息: Attempted import error: 'useDispatch' is not export
我正在 React-Redux 中尝试 Todo App;运行存储、操作、reducer 和 Addodo 组件;但在显示待办事项时卡住了: 如果我的 initialState=[] 我如何从存储中检
我见过人们像这样制作 Action 创建器(返回 Action 对象以避免拼写错误的函数): // ReduxStuff.js export const makeJuice = flavor => (
我为此找到了很多示例,但没有一个使用 Redux 和 useDispatch ,所以这里的情况...... 我有一个像这样的异步 Action 的 Action 文件...... //postsAct
每当我使用 react 钩子(Hook)安装组件时,我都想获取我的类别 useEffect而不是每次重新渲染。但我不断收到此警告 React Hook useEffect has a missing
我想在首次安装页面时调度一个操作。此操作立即将 loading 设置为 true,然后在 2 秒后将其设置为 false。 注意到当我使用 hooks/react 组件时它有不同的行为。当我使用 co
我正在使用 React、TypeScript、ESlint 和 TypeScript-ESlint。这没有任何问题。 当我安装 Redux、React-Redux 和 @types/react-red
我是一名优秀的程序员,十分优秀!