如何在反应中使用useeffect钩子?

时间:2020-07-22 12:03:29

标签: javascript reactjs typescript

我想从usehook返回一个使用useEffect的函数,并且出现错误“在既不是React函数组件也不是自定义钩子的函数中调用useeffect。

我要做什么?

我有addbutton组件,当用户单击添加按钮时,我想调用函数requestDialog。

下面是我在addbutton文件中的代码

    function AddButton () {
        const count = useGetCount();
        const requestDialog = useRequestDialog(); //using usehook here
        const on_add_click = ()  => {
            requestDialog(count); //calling requestDialog here
        }

        return (
            <button onClick={on_add_click}>add</button>
        );  
    }

 
    interface ContextProps {
        trigger: (count: number) => void;
    }

    const popupContext = React.createContext<ContextProps>({
        trigger: (availableSiteShares: number) => {},
    });

    const usePopupContext = () => React.useContext(popupContext);

    export const popupContextProvider = ({ children }: any) => {
        const [show, setShow] = React.useState(false);
        const limit = 0;

        const dismiss = () => {
            if (show) {
                sessionStorage.setItem(somePopupId, 'dismissed');
                setShow(false);
            }

        };

        const isDismissed = (dialogId: string) =>
            sessionStorage.getItem(dialogId) === 'dismissed';

            const context = {
                trigger: (count: number) => {
                if (!isDismissed(somePopupId) && count <= limit) {
                    setShow(true);
                } else if (count > limit) {
                    setShow(false);
                }
            },
        };

        return (
            <popupContext.Provider value={context}>
                {children}
                {show && (
                    <Popup onHide={dismiss} />
                )}
            </popupContext.Provider>
        );
    };


    export function useRequestDialog(enabled: boolean,count: number) {
        return function requestDialog() { //here is the error
            const { trigger } = usePopupContext();
            React.useEffect(() => {
                trigger(count);
            }
        }, [count, trigger]);
     }

如何解决错误”“在既不是React函数组件也不是自定义钩子的函数中调用useEffect。”

我不知道如何使用useeffect,而同时在addbutton组件中使用它。

有人可以帮我这个忙吗?谢谢

1 个答案:

答案 0 :(得分:2)

useEffect方法类似于useEffect(() => {}, []),但是您在requestDialog中的用法是错误的。尝试更改以下内容。

function requestDialog() {
  const { trigger } = usePopupContext();
  React.useEffect(() => {
    trigger(count);
  }, [count, trigger]);
}
相关问题