【问题标题】:Is dispatch needed in an action in redux?redux 中的操作是否需要调度?
【发布时间】:2020-07-26 08:51:03
【问题描述】:

我学习 redux 已经有一段时间了,想知道为什么动作中需要 dispatch,我们不能只使用 return,这不是一回事吗?

  return {
    type: SEARCH_MOVIE,
    payload: text,
  };
};

export const fetchMovies = (text) => (dispatch) => {
  axios
    .get(`https://www.omdbapi.com/?apikey=${APIKey}&s=${text}`)
    .then((response) =>
      dispatch({
        type: FETCH_MOVIES,
        payload: response.data.Search,
      })
    );
};

第一个action没有dispatch并且它正常工作,为什么我们需要在其他函数中使用dispatch而不是只使用return? 我只需要有人向我解释一下 dispatch 在我稍后会在我的组件中以某种方式或 onClick 调度的动作中执行什么操作。为什么我们需要调度它两次?

【问题讨论】:

    标签: javascript reactjs redux react-redux redux-thunk


    【解决方案1】:

    使用redux-thunk 库时,这是一个thunk

    使用简单的基本 Redux 存储,您只能通过调度操作来进行简单的同步更新。 ...

    Thunk 是推荐用于基本 Redux 副作用逻辑的中间件,包括...简单的异步逻辑,如 AJAX 请求。

    • action,在 redux 词汇表中,只是一个对象,例如
      {type: 'a1'},
    • action creator 是一个返回动作的函数,例如
      (value) => ({type: 'a1', valye})
    • thunk of action 是将 dispatch 函数作为参数并调用它的函数,例如
      (dispatch) => { dispatch({type: 'a1'}) }.借助 redux-thunk 中间件,它可以在任何需要操作的地方使用。
    • thunk of action creator 是一个函数 (a),它返回一个函数 (b),因此 (b) 是在 (a) 的闭包中创建的 thunk of action,例如
      (value) => (dispatch) => { dispatch({type: 'a1', value}) }

    使用redux-thunk时,简单的action creatoraction creator的thunk可以互换使用,不用(dispatch) => ...的时候不需要(异步操作或更复杂的逻辑需要从一个函数调度多个操作)。

    【讨论】:

    • 所以当我在一个稍后会被调度的动作中使用调度时,thunk 会在哪里出现并使其正常工作?如果我做对了,但是当我在一个动作中使用调度时,我只是调度以从 api 获取数据,所以来自 api 的数据被“存储”在那个动作中,我以后可以调度并在那个日期做任何事情,我可能真的很笨,但我需要有人向我解释一下,这样我才能理解。
    • 我添加了“action creator thunk”的定义,希望能澄清什么是什么。没有“动作内部的调度”,只有一个简单动作之上的更多抽象层,以便您可以从单个函数异步调度多个动作......
    • 是否有任何特定场合必须在动作创建者内部使用调度,或者如果我只是在任何地方使用 return 就可以了。我真的不理解这些东西以及为什么调度甚至出现在动作创建者。我只知道 dispatch() 用于将动作发送到减速器,这就是为什么我想知道为什么调度甚至出现在动作创建者中(我们从那里调度什么?它与返回不一样吗?为什么我们甚至使用调度吗?等等。)(我真的对所有这些东西感到困惑)。
    • aaah,抱歉,我意识到我在解释中遗漏了一步 - 现在更新为 thunk of actionthunk of action creator.. . 我想它比解释更容易使用?它不是必须,你不必在动作创建者中使用调度 - 所有动作创建者都像简单的 redux 一样工作 + 你有一个借助 redux-thunk 中间件,可以选择用 thunk of an action 替换任何简单的操作
    • 随着时间的流逝可能会理解它,但无论如何,非常感谢你的努力cya
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2018-05-13
    • 2021-09-30
    • 2021-03-29
    相关资源
    最近更新 更多