2016-07-19 7 views
4

私のプロジェクトでは、アプリケーションの状態にある値に依存するアクションクリエイターが新しい値を生成したり、ディスパッチするアクションを決定したりします。私の質問は、それが正しい方法であるかを知ることです。私は2つの方法を考えました。アクションの作成者の中にそれらの値にアクセスします。私は思っコンポーネントからのパラメータ状態として値を渡すか、アクション作成者のステータスにアクセスしますか?

export const changePreviousPage =() => { 
    return (dispatch, getState) => { 
     let pagination = getState().appReducers.availability.pagination; 

     let previousPage = pagination.actualPage != 1 ? pagination.actualPage - 1 : pagination.actualPage; 
     dispatch({ 
      type: types.CHANGE_PREVIOUS_PAGE, 
      previousPage 
     }); 
    } 
}; 

他のオプションは、アクションの作成者へのコンポーネントから値を渡すことだった:私のコンポーネントで

class Pagination extends Component { 
    ... 
    handlePreviousPage() { 
     const {pagination} = this.props; 
     this.props.changePreviousPage(pagination); 
    } 
    ... 
} 

で私のアクションクリエイター

export const changePreviousPage = pagination => { 
    let previousPage = pagination.actualPage != 1 ? pagination.actualPage - 1 : pagination.actualPage; 

    return{ 
     type: types.CHANGE_PREVIOUS_PAGE, 
     previousPage 
    } 
}; 

これに対処する最良の方法は何ですか?

答えて

0

私の意見では、は、実行時に最も近い時刻に状態を常に使用/取得します。ここではアクションクリエータ(またはそれよりも具体的には実行して戻ってくるサンク)です。

ディスパッチには、実際のstore.dispatch呼び出しの前に実行中の任意の数のミドルウェアがあることに注意してください。これには非同期ミドルウェアが含まれている可能性があります。したがって、ディスパッチの呼び出しと最終的に実行されるstore.dispatchの呼び出しの間で状態が変化している可能性があります。

アクションクリエーターに複数のものをディスパッチして状態を変え、アクションクリエーターに渡したものを一番上に無効にすることが考えられます。あなたが処理中に何も変更されないと確信していない限り、アクション作成者の一番上にあるlet state = getState()と考えている理由もあります(API呼び出しを含むとすぐに、私はいつもgetState()をストアド変数)。

また、(reduxコンテナとconnectヘルパーメソッドを使用して)stateからpropsにデータを移すと、この変更が繰り返されるたびに再レンダリングが発生し、場合によってはパフォーマンスに影響を及ぼす可能性があります。

私の個人的なコーディングの好みはあなたの例では、それはあまりありませんが、することができます((あなたがhandlePreviousPageのようなあなたのハンドラに渡しているところがあると仮定して)mapDispatchToPropsにできるだけ簡単に物事を維持し、任意のデータ処理を回避することもありますアクションクリエイターのためのデータを準備している場合、どのように手が届かないかを簡単に確認できます)。

関連する問題