如何在 React 函数中调用自定义 Hook

克鲁斯

我正在我的项目中处理一个 React 项目我有一个自定义钩子,现在我试图在一个函数中调用该自定义钩子,但它显示这样的错误 React Hook “useMediaQuery” 在函数“applyStyle”中被调用,两者都不是React 函数组件或自定义 React Hook 函数。React 组件名称必须以大写字母开头

所以有人帮我解决这个问题

这是我的代码

这是 App.js

import React, { useState, useLayoutEffect } from 'react';
import './App.css';


const App = () => {
    const [style, setStyle] = useState(null)


    function useMediaQuery() {
        const [screenSize, setScreenSize] = useState([0]);
        
        useLayoutEffect(() => {
          function updateScreenSize() {
            setScreenSize([window.innerWidth]);
          }
          window.addEventListener("resize", updateScreenSize);
          updateScreenSize();
          return () => window.removeEventListener("resize", updateScreenSize);
        }, []);
        
        return screenSize;
      }

      const applyStyle = () => {
          if(useMediaQuery() === 320) {
              setStyle({
                  marginBottom: '150px'
              })
          }
      }

return (
        <div className='container'>
            <div className='row'>
                <div className='col-12'>
                    <div className='first'>
                        <button onClick={applyStyle} style={style}  className='btn btn-primary'>Click here</button>
                        <span className='closeWindow'><i className="far fa-window-close"></i></span>
                    </div>
                    <div className='second'>
                    </div>
                </div>
            </div>
        </div>
    )
}

export default App

````
罗伯特·蒂尔塔

我想你忘记了hook的两个最重要的规则

它说

仅从 React 函数组件调用 Hook。不要从常规 JavaScript 函数调用 Hook。(只有另一个有效的地方可以调用 Hooks——你自己的自定义 Hooks。我们稍后会了解它们。)

所以你的情况应该是:

import React, { useState, useLayoutEffect } from 'react';
import './App.css';


const App = () => {
    const [style, setStyle] = useState(null)


    function useMediaQuery() {
        const [screenSize, setScreenSize] = useState([0]);
        
        useLayoutEffect(() => {
          function updateScreenSize() {
            setScreenSize([window.innerWidth]);
          }
          window.addEventListener("resize", updateScreenSize);
          updateScreenSize();
          return () => window.removeEventListener("resize", updateScreenSize);
        }, []);
        
        return screenSize;
      }
      
      const mediaQuery = useMediaQuery();

      const applyStyle = () => {
          if(mediaQuery === 320) {
              setStyle({
                  marginBottom: '150px'
              })
          }
      }

return (
        <div className='container'>
            <div className='row'>
                <div className='col-12'>
                    <div className='first'>
                        <button onClick={applyStyle} style={style}  className='btn btn-primary'>Click here</button>
                        <span className='closeWindow'><i className="far fa-window-close"></i></span>
                    </div>
                    <div className='second'>
                    </div>
                </div>
            </div>
        </div>
    )
}

export default App

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在promise中设置react hook的值?

如何在React Native中调用类组件中的hook?

React Native中的Hook:仅从React函数调用Hook

如何在React中使用useState Hook调用父函数?

如何在Next.js中实现React Hook Socketio

在函数“ app”中调用React Hook“ useState”,该函数既不是React函数组件也不是自定义React

如何测试使用自定义TypeScript React Hook的组件?

在函数“ appBar”中调用React Hook“ useStyles”,该函数既不是React函数组件也不是自定义的React Hook函数

在函数“ shoes”中调用React Hook“ useEffect”,该函数既不是React函数组件也不是自定义React Hook

如何在react hook中清理承诺数据?

如何在React Hook中使用自定义的Hook发送请求

如何创建一个自定义的react hook?

如何在React Hook的setState()函数中绑定参数?

如何在React Hook中添加自定义className?

在函数“ onSubmit”中调用React Hook,该函数既不是React函数组件也不是自定义的React Hook函数

在函数“ deviceStatus”中调用React Hook“ useState”,该函数既不是React函数组件也不是自定义React

如何在自定义React组件中添加onclick函数?

react-query如何在Jest测试中从自定义useMutation挂钩调用mutate

如何在两个 React 自定义 Hook 之间拥有共同的状态?

DatePicker 在 React 自定义 Hook 中不起作用

react中如何改变hook的参数(fetch hook)

如何在visual studio ide扩展自定义中调用自定义函数?

如何在智能表单组件中使用 react-hook-form 验证自定义输入?

React Hook 在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用

如何从 React-Table 获取剩余的 props 到自定义插件 Hook

React hook 缺少自定义 hook setter 的依赖项

React Hook "useState" 不能在类组件中调用。React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用

如何在react-hook-form中动态设置defaultValue

在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用 React Hook “useAxios”