React编码时,什么时候用js文件,什么时候用jsx文件?

在 React 项目中,JSX 和 JS 文件的选择主要取决于文件的用途和内容。以下是详细说明:

  1. 使用 JSX 文件的情况 :
    • React 组件文件
    • 包含 JSX 语法(类似 HTML 的语法)
    • 需要渲染 UI 的文件

示例:

jsx 复制代码
// Component.jsx
import React from 'react';

const MyComponent = () => {
  return (
    <div>
      <h1>Hello World</h1>
    </div>
  );
};

export default MyComponent;
  1. 使用 JS 文件的情况 :
    • 工具函数
    • 常量定义
    • 配置文件
    • API 调用
    • 纯数据处理逻辑
    • 自定义 hooks(虽然包含 JSX,但通常使用 .js 扩展名)

示例:

javascript 复制代码
// utils.js
export const formatDate = (date) => {
  return new Date(date).toLocaleDateString();
};

export const validateEmail = (email) => {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
};
javascript 复制代码
// constants.js
export const API_ENDPOINTS = {
  USERS: '/api/users',
  POSTS: '/api/posts'
};

export const STATUS = {
  PENDING: 'pending',
  APPROVED: 'approved',
  REJECTED: 'rejected'
};
  1. 最佳实践建议:

    a) 组件文件:

    • 使用 .jsx 扩展名
    • 包含 JSX 语法
    • 导出 React 组件

    b) 逻辑文件:

    • 使用 .js 扩展名
    • 包含纯 JavaScript 代码
    • 不包含 JSX 语法

    c) Hooks 文件:

    • 通常使用 .js 扩展名
    • 即使内部使用了 JSX,也推荐使用 .js
    • 示例:
    javascript 复制代码
    // hooks/useCustomHook.js
    import { useState } from 'react';
    
    export const useCustomHook = () => {
      const [state, setState] = useState(null);
      // hook 逻辑
      return { state, setState };
    };
  2. 项目结构示例:

    src/
    components/
    Button.jsx
    Modal.jsx
    Form.jsx
    hooks/
    useAuth.js
    useApi.js
    utils/
    helpers.js
    constants.js
    validators.js
    services/
    api.js
    auth.js

  3. 特殊情况:

    a) 配置文件:

    • 即使包含类似 JSX 的配置,也使用 .js
    javascript 复制代码
    // config/routes.js
    export const routes = [
      {
        path: '/',
        component: Home
      }
    ];

    b) 测试文件:

    • 通常使用 .test.js 或 .spec.js
    • 即使测试 JSX 组件也使用 .js
  4. 团队约定:

    • 保持一致性最重要
    • 在团队内部统一规范
    • 可以在 .eslintrc 中配置规则
  5. 构建工具配置:

    • 大多数现代构建工具(如 Webpack, Vite)都能正确处理两种扩展名
    • 可以在配置中指定解析规则

总结:

  • 包含 JSX 语法且是 React 组件 → 使用 .jsx
  • 纯 JavaScript 代码 → 使用 .js
  • 自定义 hooks → 推荐使用 .js
  • 保持团队内部一致性最重要

选择文件扩展名时,主要考虑文件的用途和内容,而不是严格的规定。关键是保持项目的一致性和可维护性。

相关推荐
小徐不徐说10 小时前
序列化与反序列化:把 C++ 对象可靠地保存下来
开发语言·数据库·c++·php
ragnwang10 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
骑着蜗牛撵大象32710 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
Dxy123931021611 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷11 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
云和数据.ChenGuang12 小时前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
nice_lcj52012 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
椒哥14 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
樱花树下的数学喵14 小时前
手写简易 STL string|C++ 字符串底层实现
开发语言·c++