You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中name与{name}有何区别?导入时大括号{}有什么作用?

React 中直接写name与{name}的区别

这个区别存在于JSX语法场景中,JSX本身是React.createElement的语法糖,两种写法的解析逻辑完全不同:

  • 直接书写的name:会被解析为普通字符串文本,直接原样渲染到页面上,不会读取当前作用域下同名变量的值。哪怕你已经在组件里定义了const name = '测试值',写<p>name</p>最终页面只会显示「name」四个字符。
  • 大括号包裹的{name}:是JSX的插值语法标记,大括号内部会被当作标准JavaScript表达式执行,会主动查找当前作用域下name变量的实际值,把表达式计算后的结果渲染到页面。同样定义const name = '测试值',写<p>{name}</p>最终页面显示的是「测试值」。

举个直观的对比例子:

function UserInfo() {
  const name = "李四"
  return (
    <div className="container">
      {/* 直接书写,页面渲染结果:用户名:name */}
      <p>用户名:name</p>
      {/* 大括号插值,页面渲染结果:用户名:李四 */}
      <p>用户名:{name}</p>
    </div>
  )
}

这个规则不止适用于标签内部的文本,标签属性的写法也遵循同样逻辑:比如<Link to="/home">里的to属性值是字符串/home,如果写to={homePath},就会读取变量homePath的值作为跳转地址。


导入语句中用{}包裹内容的原因

你贴的导入示例里的大括号,和上面JSX插值的大括号完全是两套独立语法,属于ES6模块化的原生规则,要不要加括号完全取决于对应模块的导出方式:

// 注:第一行常规规范写法是大写React,你贴的小写react属于不规范写法
import React from 'react';
import { Link } from 'react-router-dom';
  • 不加{}的导入:对应模块的默认导出(export default)。一个JS模块最多只能有一个默认导出,导入的时候可以自定义变量名,不需要和导出名一致,只是惯例上会和官方约定的命名保持一致,比如React模块的默认导出我们统一命名为React。
  • 加{}的导入:对应模块的命名导出(直接用export修饰的导出)。一个模块可以有任意多个命名导出,导入的时候必须在大括号内写和导出时完全一致的名称(也可以用as关键字重命名)。比如react-router-dom里除了Link组件,还导出了Routes、Route、useNavigate等组件和方法,这些都是命名导出,导入时都需要写在大括号里。

可以用一个简单的模块例子理解对应关系:

// 自定义模块 utils.js
// 默认导出,一个模块最多一个
export default function mainUtil() {
  return '默认导出内容'
}
// 命名导出,可以写多个
export const appName = '我的应用'
export function formatTime() {
  return '2024-01-01'
}

// 其他文件导入时
import customName from './utils' // 拿到默认导出的mainUtil,名字可以自定义
import { appName, formatTime } from './utils' // 拿到命名导出的两个变量,名字必须和导出时匹配

内容的提问来源于stack exchange,提问作者Shihab Raafat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:57:11