Understanding ESLint no-restricted-globals Rule in React: Resolving Location Global Variable Issues

Nov 30, 2025 · Programming · 13 views · 7.8

Keywords: React | ESLint | no-restricted-globals | location | JavaScript

Abstract: This article provides an in-depth analysis of the ESLint no-restricted-globals rule error commonly encountered in React development, focusing on the reasons behind restricted usage of the location global variable and its solutions. By comparing direct location usage with window.location, it elaborates on ESLint rule configuration principles and best practices. The article also explores proper handling of global variables in modern frontend frameworks like React Router, offering complete code examples and configuration guidance to help developers fundamentally understand and resolve such ESLint restriction issues.

Problem Background and Error Analysis

During React and Redux project development, many developers encounter ESLint's no-restricted-globals rule warning, specifically manifested as: Line 13: Unexpected use of 'location' no-restricted-globals. This error indicates that the location global variable is directly used on line 13 of the code, while ESLint configuration has listed this variable as restricted for use.

ESLint no-restricted-globals Rule Detailed Explanation

no-restricted-globals is an important rule provided by ESLint, used to restrict the usage of specific global variables. The design intention of this rule is to prevent developers from accidentally using certain global variables that may cause issues. In browser environments, location as a property of the window object, while functionally viable when used directly, may introduce uncertainty in certain scenarios.

When configuring this rule in ESLint, restricted global variables can be specified using string arrays or object arrays:

{
  "rules": {
    "no-restricted-globals": ["error", "location", "event"]
  }
}

Or using a more detailed configuration approach:

{
  "rules": {
    "no-restricted-globals": [
      "error",
      {
        "name": "location",
        "message": "Please use window.location to explicitly specify the global object"
      }
    ]
  }
}

Solution: Using window.location

For restrictions on the location global variable, the most direct and effective solution is to add the window prefix before location, i.e., using window.location. The advantages of this approach include:

Code comparison before and after modification:

Incorrect approach:

// Directly using location global variable
const currentPath = location.pathname;
const queryParams = location.search;

Correct approach:

// Accessing location through window object
const currentPath = window.location.pathname;
const queryParams = window.location.search;

Practical Application in React Projects

In the React ecosystem, particularly when using React Router for route management, the best practice for handling URL-related information is to use the Hook provided by React Router:

import { useLocation } from 'react-router-dom';

function MyComponent() {
  const location = useLocation();
  
  // Using the location object provided by React Router
  console.log(location.pathname);
  console.log(location.search);
  
  return <div>Current path: {location.pathname}</div>;
}

This method not only avoids ESLint warnings but also provides better type safety and framework integration.

Advanced ESLint Rule Configuration

The no-restricted-globals rule supports more complex configuration options, including checkGlobalObject and globalObjects:

{
  "rules": {
    "no-restricted-globals": [
      "error",
      {
        "globals": ["location", "event"],
        "checkGlobalObject": true,
        "globalObjects": ["window", "self", "globalThis"]
      }
    ]
  }
}

When checkGlobalObject is set to true, ESLint checks for access to restricted variables through global objects, providing stricter code quality assurance.

Special Handling in TypeScript Environments

In TypeScript projects, the no-restricted-globals rule intelligently ignores global variable references in type annotations:

// The following code will not trigger ESLint warnings
interface CustomLocation extends Location {
  customProperty: string;
}

function navigateTo(url: string): void {
  window.location.href = url;
}

Summary and Best Practices

The key to resolving no-restricted-globals rule warnings lies in understanding ESLint rule design intentions and modern JavaScript development best practices. By using window.location instead of direct location references, not only can ESLint warnings be eliminated, but code robustness and maintainability can also be improved. In React projects, prioritize using framework-provided APIs (such as React Router Hooks) to handle route-related information, which will result in better development experience and code quality.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.