4.jsx语法(下)

通过前面的学习我们已经初步认知了jsx的部分语法,今天我们详细学习一下

1.使用驼峰式命名法给大部分属性命名

function App() {


  return (
    <>
      <div className="box" ></div>
    </>
  )
}

例如class在jsx中要写成className

下面是常见属性对比:

HTML 属性JSX 写法(驼峰式)
classclassName
forhtmlFor
tabindextabIndex
maxlengthmaxLength
onclickonClick
onchangeonChange
readonlyreadOnly
autoplayautoPlay
contenteditablecontentEditable

2.JSX 与表达式 vs 语句

{} 里能放 表达式,不能放 语句

// ✅ 表达式
{1 + 2}
{user.name}
{isLogin ? "已登录" : "未登录"}

// ❌ 语句(不能写)
{if (isLogin) { return "已登录"; }}
{for (let i=0; i<10; i++) {}}

如果要写语句,需要用函数或逻辑包装:

{(() => {
  if (isLogin) return "已登录";
  return "未登录";
})()}

3.条件渲染

  • 三元运算符

// 三元运算符
{isLogin ? <p>欢迎回来</p> : <p>请登录</p>}
  • 函数逻辑

例如:

       方式 1:在渲染之前用普通 if/else

 先在函数里用 if 计算出一个变量,再放到 JSX 里:

function App() {
  const isLogin = true;
  let content;

  if (isLogin) {
    content = <p>欢迎回来</p>;
  } else {
    content = <p>请登录</p>;
  }

  return (
    <>
      <h1>用户状态</h1>
      {content}
    </>
  );
}

方式 2:立即执行函数(IIFE)

function App() {


  return (
    <>


      {/* 使用 IIFE 做条件渲染 */}
      {(() => {
        if (isLogin) {
          return <p>欢迎回来</p>;
        } else {
          return <p>请登录</p>;
        }
      })()}


    </>
  );
}

4.列表渲染

在 React 里,一般用 数组的 map 方法 来做循环渲染

function App() {
  const fruits = ["苹果", "香蕉", "橙子"];

  return (
    <ul>
      {fruits.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
}

export default App;
  • fruits.map(...):循环数组

  • 每次返回一个 <li> 元素

  • 必须加 key 属性(React 用它来高效对比和更新 DOM),以避免渲染性能问题

5.组件渲染

例如:

function Welcome(props) {
  return <h2>你好, {props.name}</h2>;
}

function App() {
  return (
    <div>
      <Welcome name="天哥" />
      <Welcome name="小明" />
    </div>
  );
}

React 里的 props(属性)

  • propsproperties 的缩写。

  • 用来在 父组件 → 子组件 之间传递数据。

  • 在函数式组件中,props 是一个对象,里面包含所有传入的属性。

  • 只读(immutable,不可修改)

    • 子组件不能直接改 props 的值,只能使用。

    • React 强调 单向数据流(数据从父到子)。

  • 灵活传递

    • 可以传递 字符串、数字、布尔值、数组、对象、函数、JSX 元素

<think>好的,用户想创建一个名为color.jsx的React组件文件。首先,我需要回忆React组件的基本结构。通常,组件可以是函数式组件或类组件,但现在主流是函数式组件配合Hooks。所以应该建议使用函数式组件。 接下来,组件的命名需要遵循PascalCase,也就是首字母大写,所以Color.jsx更合适。但用户可能输入的是color.jsx,这时候可能需要提醒他们文件名最好大写,但也要确认是否必须严格使用小写。不过根据引用中的示例,比如JSXLiveCompiler.js,文件名可能不强制大写,但组件名应该大写。例如引用[3]中的JSXLiveCompiler组件,文件名是JSXLiveCompiler.js,组件名也是大写的。所以用户可能需要将文件名改为Color.jsx,或者保持color.jsx但组件名必须大写。 然后,组件需要导入React,根据引用[2]和[3],使用JSX语法必须导入React,即使没有直接使用React变量。比如引用[2]中提到需要import React来解析JSX。所以组件文件的开头应该有import React from 'react'。 如果是函数式组件,可以写成: import React from 'react'; const Color = () => { ... }; export default Color; 或者使用箭头函数。同时,可能需要添加props参数,让组件可以接收属性。例如颜色值作为prop传入。 接着,考虑组件的内容。用户可能希望这个组件显示某种颜色,比如一个带有背景色的div。所以组件可能接受一个color prop,然后应用该颜色到样式里。样式方面,根据引用[4],React中的样式属性要用驼峰式,比如backgroundColor,而不是background-color。同时,className应该用来指定类名,而不是class。 例如,组件的return部分可能类似: return ( <div style={{ backgroundColor: color }} className="color-box"> {color} </div> ); 然后,导出组件。需要确保导出正确,比如export default Color。 另外,可能还需要考虑PropTypes或者TypeScript来定义props的类型,但用户可能暂时不需要,所以可以后续提到作为优化点。 最后,在另一个组件中使用Color组件时,需要导入,比如import Color from './Color'; 然后传递color属性。 现在需要检查是否有遗漏的步骤,比如是否需要引入CSS模块,但根据引用[5],如果使用CSS模块,需要配置webpack,但用户可能只是需要基础组件,所以暂时不涉及。 总结步骤:创建文件Color.jsx,导入React,编写函数组件,定义props,应用样式,导出组件。同时注意命名规范和JSX语法。</think>### 如何创建名为 color.jsx 的 React 组件文件? #### 1. **文件命名规范** - React 组件文件建议使用 **PascalCase 命名法**(例如 `Color.jsx` 更规范),但 `color.jsx` 也可运行[^4]。 - 组件名称必须使用大写字母开头(如 `Color`),否则 React 无法识别为组件[^2]。 #### 2. **基础组件结构** ```jsx // color.jsx import React from 'react'; const Color = ({ color }) => { return ( <div style={{ backgroundColor: color, // React 使用驼峰式样式属性名[^4] width: '100px', height: '100px' }} className="color-box" // 类名需用 className 代替 class[^4] > {color} </div> ); }; export default Color; ``` #### 3. **组件使用示例** 在父组件中导入并使用: ```jsx import Color from './color.jsx'; function App() { return ( <div> <Color color="#ff0000" /> </div> ); } ``` #### 4. **扩展功能(可选)** - **添加 PropTypes 类型检查**: ```jsx import PropTypes from 'prop-types'; Color.propTypes = { color: PropTypes.string.isRequired }; ``` - **使用 CSS Modules**(需配置 webpack)[^5]: ```jsx import styles from './Color.module.css'; // 在 JSX 中使用 <div className={styles.colorBox}></div> ``` #### 5. **关键注意事项** - **必须导入 React**:JSX 语法依赖 React 解析[^2][^3] - **属性命名规则**:HTML/SVG 属性需转换为驼峰式(如 `strokeWidth`)[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值