JSX 一些语法 要注意的

本文详细介绍了JSX中的注释写法,包括在React组件的render方法中如何使用注释,以及如何正确设置元素的样式属性。同时,提到了在React中使用label标签与input元素交互的方法。

JSX的注释。

首先,JSX 代码,是在render 中 return 里面的,然后,它的注释写法是下面这样的。

render() {
    return (
      <React.Fragment>
        <div>
          {/*注释*/}
          <label htmlFor="insertArea">输入内容</label>
          <input
            id="insertArea"
            value={this.state.inputValue}
            onChange={this.handleInputChange}
          />
          <button style={{background: 'red',color: 'white'}} onClick={this.handleBtnClick}>add</button>
        </div>
        <ul>
          {this.getTodoItems()}
        </ul>
      </React.Fragment>
    );
  }

元素的样式 class 属性,不要用,使用className 属性。如下。

        return (
          <TodoItem className='red-btn' deleteItem={this.handleDelete} key={index} content={item} index={index} />
        )

不用转义标签,直接按html 显示出来,如下。有实际需要时,可以这样写,但不推荐其他情况下这样写,因为可能有安全风险。

<li
  key = {index}
  dangerouslySetInnerHTML={{__html: item}}
>
</li>

label 标签。在html 中,label 主要起扩大输入内容的作用。

在React 中,我们想点击label 对应的input 获得焦点,可以如下。(将html 的for 属性,改为htmlFor属性)

  render() {
    return (
      <React.Fragment>
        <div>
          <label htmlFor="insertArea">输入内容</label>
          <input
            id="insertArea"
            value={this.state.inputValue}
            onChange={this.handleInputChange}
          />
          <button style={{background: 'red',color: 'white'}} onClick={this.handleBtnClick}>add</button>
        </div>
        <ul>
          {this.getTodoItems()}
        </ul>
      </React.Fragment>
    );
  }

 

JSX(JavaScript XML)是一种扩展语法,允许在JavaScript中编写类似HTML或XML的代码结构。它最初由React团队提出,用于简化React组件的构建过程。JSX并不是JavaScript的标准语法,因此需要通过编译工具(如Babel)将其转换为标准的JavaScript代码。 ### JSX的基本语法 JSX的基本语法非常直观,可以看作是HTML和JavaScript的结合体。以下是一些常见的JSX语法示例: #### 1. 基本元素 在JSX中,可以直接使用类似HTML的标签来创建React元素。例如: ```jsx const element = <h1>Hello, world!</h1>; ``` 这段代码会被编译为: ```javascript const element = React.createElement('h1', null, 'Hello, world!'); ``` #### 2. 嵌套元素 JSX支持嵌套元素,类似于HTML的结构。例如: ```jsx const element = ( <div> <h1>Hello, world!</h1> <p>Welcome to JSX.</p> </div> ); ``` 编译后的代码如下: ```javascript const element = React.createElement( 'div', null, React.createElement('h1', null, 'Hello, world!'), React.createElement('p', null, 'Welcome to JSX.') ); ``` #### 3. 属性 JSX允许为元素添加属性,属性值可以是字符串或JavaScript表达式。例如: ```jsx const element = <img src="image.jpg" alt="Image" />; ``` 如果属性值是一个JavaScript表达式,可以使用大括号`{}`包裹: ```jsx const src = "image.jpg"; const element = <img src={src} alt="Image" />; ``` #### 4. 条件渲染 JSX支持条件渲染,可以通过JavaScript表达式来控制是否渲染某个元素。例如: ```jsx const isLoggedIn = true; const element = ( <div> {isLoggedIn ? <p>Welcome back!</p> : <p>Please sign in.</p>} </div> ); ``` #### 5. 列表渲染 JSX可以通过数组的`map`方法来渲染列表。例如: ```jsx const numbers = [1, 2, 3]; const listItems = numbers.map((number) => <li key={number}>{number}</li> ); const element = <ul>{listItems}</ul>; ``` ### JSX注意事项 1. **组件名称必须大写**:在React中,组件名称必须以大写字母开头,以便与HTML标签区分开来。例如: ```jsx function Welcome() { return <h1>Hello, world!</h1>; } const element = <Welcome />; ``` 2. **唯一外层元素**:JSX表达式必须只有一个外层元素。例如,以下代码是无效的: ```jsx const element = ( <h1>Hello, world!</h1> <p>Welcome to JSX.</p> ); ``` 正确的做法是将它们包裹在一个父元素中: ```jsx const element = ( <div> <h1>Hello, world!</h1> <p>Welcome to JSX.</p> </div> ); ``` 3. **使用`key`属性**:在渲染列表时,每个列表项都应该有一个唯一的`key`属性,以帮助React识别哪些元素发生了变化、添加或删除。 ### JSX的优势 1. **直观的模板语法**:JSX允许开发者在JavaScript中直接编写类似HTML的代码,使得组件的结构更加直观和易于理解。 2. **组件化开发**:JSX与React的组件化开发模式相结合,使得开发者可以轻松地构建复杂的用户界面。 3. **性能优化**:React通过虚拟DOM和高效的diff算法,确保了JSX代码在运行时的高性能表现。 ### 示例代码 以下是一个完整的React组件示例,展示了如何使用JSX: ```jsx import React from 'react'; function Welcome(props) { return <h1>Hello, {props.name}!</h1>; } function App() { return ( <div> <Welcome name="Alice" /> <Welcome name="Bob" /> <Welcome name="Charlie" /> </div> ); } export default App; ``` 在这个示例中,`Welcome`是一个简单的React组件,接受一个`name`属性并返回一个包含该名称的`<h1>`元素。`App`组件则使用`Welcome`组件来显示多个欢迎消息。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值