From eaac55e70dd03ea8ca4f569491017cedfbf06a16 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Wed, 9 Sep 2020 22:30:06 -0700 Subject: [PATCH] Add useActionCreator hook --- src/UploadButton.js | 8 +++----- src/hooks.js | 11 ++++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/UploadButton.js b/src/UploadButton.js index 9f060891..daac93bd 100644 --- a/src/UploadButton.js +++ b/src/UploadButton.js @@ -1,5 +1,6 @@ import * as React from "react"; -import { useSelector, useDispatch } from "react-redux"; +import { useSelector } from "react-redux"; +import { useActionCreator } from "./hooks"; import * as Actions from "./redux/actionCreators"; import { SHOW_UPLOAD } from "./constants"; import UploadIcon from "./components/icons/UploadIcon"; @@ -7,10 +8,7 @@ import CloseIcon from "./components/icons/CloseIcon"; function UploadButton() { const uploadViewOpen = useSelector((state) => state.uploadViewState); - const dispatch = useDispatch(); - function toggleUploadView() { - dispatch(Actions.toggleUploadView()); - } + const toggleUploadView = useActionCreator(Actions.toggleUploadView); if (!SHOW_UPLOAD) { return null; } diff --git a/src/hooks.js b/src/hooks.js index 92f8f815..f305ca35 100644 --- a/src/hooks.js +++ b/src/hooks.js @@ -1,5 +1,6 @@ import * as Utils from "./utils"; -import { useMemo, useState, useEffect } from "react"; +import { useMemo, useState, useEffect, useCallback } from "react"; +import { useDispatch } from "react-redux"; export function useWindowSize() { const [windowSize, setWindowSize] = useState(Utils.getWindowSize()); @@ -38,3 +39,11 @@ export function useScrollbarWidth() { return scrollbarWidth; }, []); } + +export function useActionCreator(actionCreator) { + const dispatch = useDispatch(); + return useCallback((...args) => dispatch(actionCreator(...args)), [ + dispatch, + actionCreator, + ]); +}