React入门 - 04(从编写一个简单的 TodoList 说起)

上一节我们已经对 React组件和 ”JSX语法“有了大概的了解,这一节我们继续在 react-demo这个工程里编写代码。这一节我们来简单实现一个 TodoList来更加了解编写组件的一些细节。

1、在编辑器中打开 react-demo这个工程

2、打开 index.js文件,将组件 App改为 TodoList,挂载的地方同样进行此修改。

import React from 'react';
import ReactDOM from 'react-dom/client'; 
import reportWebVitals from './reportWebVitals';

import TodoList from './TodoList'; 


const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <TodoList />
  </React.StrictMode>
);


reportWebVitals(); 

3、在src文件下新建 TodoList.js文件,内容编写如下

import React, {
    Component } from "react";

class TodoList extends Component{
   
  render() {
   
    return (
      <div>
        todolist 内容
      </div>
    )
  }
}

export default TodoList

4、运行下工程,可以看到网页的内容如下
在这里插入图片描述

5、我们继续实现 TodoList功能:界面有一个输入框和一个提交按钮,在输入框里输入内容,点击”提交“按钮后,内容就会以列表的形式展示在界面 input框下面。

6、根据功能要求,我们继续编写 TodoList组件代码

import React, {
    Component } from "react";

class TodoList extends Component{
   
  render() {
   
    return (
      <div>
        <input />
        <button> 提交 </button>
      </div>

      <ul>
        <li>React 入门-01</li>
        <li>React 入门-02</li>
        <li>React 入门-03</li>
      </ul>
    )
  }
}

export default TodoList

7、运行代码时报错如图。
在这里插入图片描述

8、为什么报错呢?答案:因为”JSX语法“要求我们在写 HTML标签时,最外层有且只能有一个 <div>标签来对所有标签进行包裹。所以将代码改正一下

import React, {
    Component } from "react";

class TodoList extends Component{
   
  render() {
   
    return (
   // 外层有且只能有一个 div 标签对所有标签进行包裹!
      <div>
        <div>
          <input />
          <button> 提交 </button>
        </div>
        <ul>
          <li>React 入门-01</li>
          <li>React 入门-02</li>
          <li>React 入门-03</li>
        </ul>
      </div>
    )
  }
}

export default TodoList

9、关于”JSX“外层有且只能有一个 <div>包裹。细心的你们一定会发现这个 <div>会实实在在的显示在了 DOM 结构上,但有的时候我们并不希望有这个多余的节点出现,这个又怎么进行解决呢?
在这里插入图片描述

10、在 React 16版本里,React提供了一个名为 Fragment的占位符来解决这个问题。也就是说,我们可以从 react中引入这个 Fragment,然后使用 <Fragment>来 代替最外层的 <div>元素

// 引入 Fragment
import React, {
    Component, Fragment } from "react";

class TodoList extends Component{
   
  render() {
   
    return (
   // 使用 Fragment 代替 div
      <Fragment>
        <div>
          <input />
          <button> 提交 </button>
        </div>
        <ul>
          <li>React 入门-01</li>
          <li>React 入门-02</li>
          <li>React 入门-03</li>
        </ul>
      </Fragment>
    )
  }
}

export default TodoList

11、再次观察 DOM 结构,就会发现顶级 <div>的问题就解决了
在这里插入图片描述

到此,本章的内容就结束了!

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-10 08:36:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-10 08:36:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-10 08:36:03       87 阅读
  4. Python语言-面向对象

    2024-01-10 08:36:03       96 阅读

热门阅读

  1. ES6 新增 Set、Map 两种数据结构的理解

    2024-01-10 08:36:03       51 阅读
  2. LeetCode_4_困难_寻找两个正序数组的中位数

    2024-01-10 08:36:03       52 阅读
  3. 一、数据结构

    2024-01-10 08:36:03       58 阅读
  4. 抽丝剥茧设计模式-目录

    2024-01-10 08:36:03       69 阅读
  5. PHP数组复习

    2024-01-10 08:36:03       53 阅读
  6. Spring Boot参数校验方案

    2024-01-10 08:36:03       62 阅读
  7. Spring boot 启动添加访问地址和swagger地址输出

    2024-01-10 08:36:03       54 阅读
  8. Oracle游标深入探讨

    2024-01-10 08:36:03       62 阅读
  9. LeetCode 32. 最长有效括号

    2024-01-10 08:36:03       48 阅读
  10. 二级C语言备考1

    2024-01-10 08:36:03       44 阅读
  11. Kotlin 协程 supervisorScope {} 运行崩溃解决

    2024-01-10 08:36:03       43 阅读
  12. 策略模式--在SpringBoot中的使用

    2024-01-10 08:36:03       48 阅读
  13. img标签的奇怪问题

    2024-01-10 08:36:03       52 阅读
  14. js解决pdf使用iframe打印报跨域错误问题

    2024-01-10 08:36:03       48 阅读