【问题标题】:checks inside action creators检查内部动作创建者
【发布时间】:2016-12-03 08:15:14
【问题描述】:

我正在创建一个简单的应用程序,它向服务器发出 GET 请求,然后准备接收到的数据并创建图表。有几个问题:

  1. 我应该将负责检查和准备原始数据的代码放在哪里。目前我在我的动作创建者中有它,但也许它需要在组件本身中?

  2. 我需要检查并比较准备好的数据和已经用于图表的数据,如果相同或无效,请不要调用重新渲染。我应该把这张支票放在哪里?现在我也想把它放在动作创作者里面。但为此我需要使用getState() 来访问状态,看起来不正确。

  3. 对我来说,Action creators 似乎是所有这些检查的正确位置,因为如果数据无效,我就不能用它更新我的状态,(例如,不要派遣某些 action creator)或者我必须更新尽管新数据无效,但仍包含新数据的状态?

鉴于这些动作创建者,描述检查的最佳位置是什么?:

     export function fetchPopulations(term = "") {
          return function (dispatch) {
               dispatch(fetchingPopulations())

               term=toTitleCase(term)

               return fetch(`${API_URL}${term.replace(/\s/g, '%20')}`)
               .then(response => response.json())
               .then(json => dispatch(requestPopulations(json)))
      }
  }

  export function requestPopulations(data = []) {
      return {
          type: REQUEST_POPULATIONS,
          payload: data,
      }
  }
  export function fetchingPopulations() {
      return {
          type: FETCHING_POPULATIONS
      }
  }

【问题讨论】:

    标签: redux react-redux


    【解决方案1】:

    我会说你做得对。

    在您的示例中,requestPopulationsfetchingPopulations 是真正的动作创建者,fetchPopulations 是一个组合函数(是的,组合函数是为了获胜!)。

    1. 我应该在哪里放置负责检查和准备原始代码的代码 数据。目前我在我的动作创建者中有它,但也许它需要 在组件本身中?

      组件不是放置我们应用程序的业务逻辑的地方。组件应该只代表我们 MVC 中的 View。没有 API 调用,没有业务逻辑,只有 props 和 state。

    2. 我需要检查并比较准备好的数据与 已经用于图表,如果相同则不要调用重新渲染 或无效。我应该把这张支票放在哪里?现在我想放置 它也在动作创作者内部。但为此我需要使用 getState() 用于访问状态,看起来不正确。

      创建用于执行这些检查的模块化函数(代码维护和重用非常出色),将它们与您的实际动作创建者一起组合到另一个函数中,并且您可以仅在需要时进行调度。可以在组件生命周期钩子shouldComponentUpdate(nextProps, nextState) 内进行进一步优化。另外我认为使用带有这样签名的方法绝对不是反模式:

      export function myComposingFunction(params) {
          return (dispatch, getState) => {
              // ...  
      

      所以你可以使用getState()

    3. 对我来说,Action creators 似乎适合所有这些检查,因为 如果数据无效,我就不能用它来更新我的状态,(例如 不要派遣某些动作创建者)或者我必须更新 尽管新数据无效,但仍显示新数据?

      不,不要用无用的数据更新状态。如果你这样做,你将重新渲染整个树。你说“如果数据无效,我不能用它来更新我的状态,(例如,不要派遣某些动作创建者)”是绝对正确的

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 2017-09-16
      • 1970-01-01
      相关资源
      最近更新 更多