设置React Redux调度的正确类型

时间:2020-07-08 07:42:27

标签: reactjs typescript react-redux redux-thunk redux-toolkit

具有如下代码(不是实际的工作代码,只是为了给您一个想法):

import { useDispatch } from 'react-redux'

const dispatch = useDispatch()

interface IProp {
  prop: number
}

const [data, setData] = useState<number[]>([])

async ({ prop }: IProp) => {
  const data = await dispatch<any>(
    fetchData({
      prop
    })
  )

  setData(data)
}

fetchData类型

fetchData({ prop }: IProp): (dispatch, getState) => Promise<number[]>

如何设置dispatch的类型,该类型最终将返回数字数组? Any是临时解决方法

编辑:

fetchData实际上是一个动作。我不会在这里详细介绍,但让我们假设它看起来像这样:

export const fetchData = ({
  prop
}) => async (dispatch, getState) => {
  // do something store-related like dispatching other actions or getting values from store
  // get `extra`

  const { data } = await actualFetch({
    prop,
    extra
  })

  return data
}

1 个答案:

答案 0 :(得分:0)

dispatch仅返回您作为参数传递的操作。 https://github.com/reduxjs/redux/blob/master/src/createStore.ts#L257

没有理由等待它,它也不会包含获取的数据。

正如Maciej Sikora所提到的,您根本不需要redux。如果出于某种原因仍要将数据传递到redux,请在获取并处理数据后进行处理。

interface Props {
    prop: number
}

function SomeComponent (props: Props) {
    const [data, setData] = useState<number[]>([]);

    const onClick = async () => {
        const data = await fetchData(props);
        setData(data);
    };

    return <div>
        {data}
        <button onClick={onClick}>Fetch!</button>
    </div>;
}