React import 配置路径别名‘@’,简化import Component的方式

本文介绍了如何在React项目中通过配置路径别名'@',简化组件import的方式,提高代码可维护性。通过两种路径别名重写方法,结合customize-cra覆写webpack配置,并演示了在VSCode中启用@路径智能提示的设置过程,包括安装Path Intellisense插件和配置jsconfig.json。

摘要

在react中,大多数业务逻辑都组件化;极大的减轻了代码的冗余度,如果组件的层次比较深的话,组件的import就比较费劲,在import时使用“…/…/components/test”的方式,组件的import就会稍显混乱、组件代码不容易维护。为了可高效的、快速的维护组件代码,废弃“…/…/”的组件引入方式,配置一个组件路径重写的方式引入组件。

配置内容

我在之前就介绍过在react中引入less的配置,同样的为了配置一个路径别名,使用customize-cra来覆写webpack底层配置。(配置覆写webpack需要的插件以及第三方库就不在复述,不清楚的可以去参考Ant Design官方的配置说明)

附上我的less配置原文地址:https://www.cnblogs.com/BlueBerryCode/p/11943111.html

路径别名重写方式一

const { override } = require('customize-cra');
const path = require("path");
 
module.exports = override(
     config =>{
         config.resolve.alias = {
             "@": path.resolve(__dirname, "src")
         };
         return config;
     },
);

路径别名重写方式二

const { override, addWebpackAlias } = require('customize-cra');
const path = require("path");
 
module.exports = override(
    addWebpackAlias({
        ["@"]: path.resolve(__dirname, "src")
    }),
);

Example-实例展示

App.js父组件代码

import React, { useState } from 'react'
import style from './App.module.less'
import { Home } from '@/pages/home'; //@方式引入Home组件
 
class App extends React.Component {
    render() {
        return (
            <div className={style.box}>
                <Home name='杰瑞与汤姆'/>
            </div>
        );
    }
}
 
export default App;

Home.js子组件代码

import React, { Component } from 'react';
import { Button } from 'antd';
 
export class Home extends Component {
    constructor(props) {
        super(props);
        this.state = {  };
    }
    render() {
        return (
            <div>
                <Button type='danger'>{this.props.name}</Button>
            </div>
        );
    }
}

配置@路径智能提示

在测试过程中,虽然应用了@引入组件的方式,但是在引用过程中没有智能提示组件路径,为了解决智能提示问题,安装Path Intellisence插件来配置提示。

1、VsCode插件

Path Intellisence(在插件库中查找并下载插件)

2、VsCode中setting.json配置插件功能:(打开vscode编辑器设置,在设置中打开setting.json文件)

// 配置@路径智能提示
  "path-intellisense.mappings": {
    "@": "${workspaceRoot}/src"
  }

3、在项目package.json所在同级目录下创建文件jsconfig.json

{
  "compilerOptions": {
      "target": "ES6",
      "module": "commonjs",
      "allowSyntheticDefaultImports": true,
      "baseUrl": "./",
      "paths": {
        "@/*": ["src/*"]
      }
  },
  "exclude": [
      "node_modules"
  ]
}

总结

分享一种更高效、快捷的import方式,这样的import方式既保证了组件式代码高内聚性、低耦合度的特性,也提高了项目的可维护性,更好的锁定问题所在。

更多关于customize-cra库API的使用可以访问github的文档说明,customize-cra库地址:https://github.com/arackaf/customize-cra/blob/master/api.md

<think>好的,我现在需要帮助用户解决在React配置或使用“@”符号的问题,包括别名设置和相关功能。首先,我需要回忆React项目中常见的“@”符号用途。通常,“@”在导入语句中用作路径别名,比如`@/components/Button`,这样可以避免相对路径的繁琐。这通常通过Webpack或Babel配置实现。 接下来,我需要确认用户提到的“@”可能涉及哪些方面。除了路径别名,还可能涉及装饰器语法,比如使用@connect或@observer这样的装饰器。但装饰器在React中需要Babel插件支持,比如@babel/plugin-proposal-decorators。不过用户的问题可能更多是路径别名,所以需要先覆盖这点。 然后,我需要检查用户提供的引用内容。引用[1]提到了安装Babel相关插件,比如@babel/preset-react@babel/plugin-proposal-class-properties,这可能和装饰器有关。但用户的问题可能更偏向路径别名,所以需要结合Webpack配置。 接下来,分步骤解答。首先,路径别名配置通常在Webpack的resolve.alias中设置。需要指导用户如何修改webpack.config.js,添加alias部分,比如将'@'指向src目录。同时,如果使用Create React App,可能需要使用react-app-rewired或eject来覆盖配置。另外,还要提到在jsconfig.json或tsconfig.json中配置路径别名,以便编辑器的智能提示支持。 然后,装饰器的配置需要安装对应的Babel插件,如@babel/plugin-proposal-decorators,并在Babel配置中启用。但装饰器语法在React中并不常见,可能用户更常用的是路径别名,所以需要强调这部分。 可能的问题点:用户是否混淆了装饰器和路径别名?需要明确两者都是使用“@”,但用途不同。因此,在回答中需要分两部分说明,并给出示例代码。 此外,用户提供的引用[3]提到了条件监听,这可能与装饰器有关,但不确定是否有直接联系。引用[1]中的依赖包括Babel插件,这可能支持装饰器语法,所以需要提到。 最后,生成相关问题,如如何配置路径别名,如何处理装饰器,如何解决配置后的路径问题,以及如何与TypeScript配合使用等。</think>[系统级指令(回答整理)] 在React项目中,"@"符号主要有两种使用场景:路径别名配置和装饰器语法支持,下面分步骤说明具体配置方法: ### 一、路径别名配置(常用场景) 1. **Webpack配置** 修改`webpack.config.js`添加resolve别名: ```javascript const path = require('path'); module.exports = { resolve: { alias: { '@': path.resolve(__dirname, 'src/') // 将@映射到src目录 } } } ``` 使用create-react-app创建的项目需要通过`react-app-rewired`覆盖配置[^1] 2. **TypeScript支持** 在`tsconfig.json`中添加: ```json { "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["src/*"] } } } ``` 3. **JavaScript项目支持** 创建`jsconfig.json`文件: ```json { "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["./src/*"] } } } ``` ### 二、装饰器语法支持(需Babel配置) 1. 安装必要依赖: ```bash yarn add @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties -D ``` 2. 配置`.babelrc`: ```json { "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-class-properties", { "loose": true }] ] } ``` 3. 使用示例: ```javascript @connect(state => ({ user: state.user })) class Profile extends React.Component { // 组件逻辑 } ``` ### 三、模块路径解析示例 配置后可使用如下导入方式: ```javascript import Button from '@/components/Button'; // 代替'../../components/Button' ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值