检查内部动作创建者

时间:2016-12-03 08:15:14

标签: redux react-redux

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

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

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

  3. 对我来说,动作创建者似乎是所有这些检查的正确位置,因为如果数据无效,我就不能用它来更新我的状态,(例如,不要派遣某些动作创建者)或者我可能需要更新尽管它没有效,但是有新数据的状态?

  4. 给定这些动作创建者,描述检查的最佳位置是什么?:

         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
          }
      }
    

1 个答案:

答案 0 :(得分:1)

我会说你做对了。

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

  1.   

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

    组件不是放置应用程序业务逻辑的地方。组件应仅代表我们的MVC中的视图。没有API调用,没有业务逻辑,只有道具和状态。

  2.   

    我需要检查并比较准备好的数据和数据   已经用于图表,如果它是相同的,不要调用重新渲染   或无效。我应该把这张支票放在哪里?现在我想放置   它也在动作创作者中。但为此,我需要使用getState()   进入州,看起来不对。

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

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

    所以你可以使用getState()

  3.   

    对我来说,动作创作者似乎适合所有这些检查,因为   如果数据无效,我就不能用它更新我的状态,(例如   不要派遣某些行动创造者)或者我可能需要更新   虽然它没有效,但是有新数据的状态?

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