开发者问题收集

ReactJS:TypeError:无法读取 null 的属性(读取“useRef”)

2022-04-04
22551

我在生产中的 React 应用程序中收到此错误:
TypeError:无法读取 null 的属性(读取“useRef”)
启用 sourcemap 后,它会在 react.production.min.js

中显示错误>

奇怪的是,我只在特定路由上收到此错误。所有其他路由都运行良好(即使我在多个文件中使用了 useRef )。

由于本地构建运行良好,我无法在本地重现该问题。

我尝试了以下操作:

  1. 恢复到之前的工作提交。
  2. 在生产机器上重新安装 node_modules
  3. 从 Yarn 切换到 NPM

我正在使用 express 来托管静态构建文件。代码如下:

const helmet = require('helmet');
const path = require('path');
const app = express();
const fs = require('fs');

app.disable('x-powered-by');
app.use(helmet.frameguard({ action: 'DENY' }));
app.use(express.static(__dirname));

app.get('*', function (req, res) {
    res.sendFile(path.join(__dirname, 'index.html'), {
        maxAge: 86400000,
    });
});
app.listen(process.env.PORT || 8080, function () {
    console.log(`Frontend start on http://localhost:8080`);
});

编辑: React 组件:

import React, { useRef } from 'react';

const ConfigForm = (props) => {
    const scrollTopRef = useRef(null);

    const scrollToTop = () => {
        if (scrollTopRef && scrollTopRef.current) {
            scrollTopRef.current.scrollTo({
                top: 0,
                behavior: 'smooth',
            });
        }
    };

    const onButtonClick = () => {
        scrollToTop();
    }

    return (
        <div className="client-configs" ref={scrollTopRef}>
            <button onClick={onButtonClick}>Scroll To Top</button>
        </div>
    );
}

export default ConfigForm;
3个回答

由于我在 React 组件中使用的一个包,路由失败了。它的 package.json 提到了 "react": ">=16"

几天前,React v18 发布了。生产机器在 node_modules 中更新了这个包。该包不支持此功能,因此失败了。

本地 node_modules 更新不频繁。这就是原因,它在本地可以工作,但在生产中失败了。

经验教训:

  • 将包版本称为 ~version^version 。查看 此处
shindeshubhamm
2022-04-05

我遇到了这个错误,我的包被安装到了错误的节点模块文件夹。它们被安装到了后端节点模块文件夹而不是前端,通过移动文件解决了这个问题。

James Black
2024-04-05
const scrollTopRef = useRef(null);

这实际上意味着 scrollTopRef 的值为 null 。 然后您使用 scrollTopRef.current ,这意味着您尝试在 null 上访问 current 属性,这是一个错误。因此,您需要将 scrollTopRef 设置为某个有意义的值。

useRef Hook 允许您在渲染之间保留值。

它可用于存储可变值,该值在更新时不会导致重新渲染。

Harshit Agarwal
2022-04-04