todoList_1-实现基本样式

Tutorial: React基础 Category: React Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
  • 整体样式如下

    react-01

  1. 新建 4 个组件, 目录如下

    $ ls -R src/
      src/:
      App.css App.js  components/  index.js
    
      src/components:
      Footer/  Header/  Item/  List/
    
      src/components/Footer:
      index.jsx
    
      src/components/Header:
      index.jsx
    
      src/components/Item:
      index.jsx
    
      src/components/List:
      index.jsx
    
  2. 单个组件内容, 例如 Footer => index.jsx

    import React, { Component } from "react";
    
    export default class Footer extends Component {
      render() {
        return <div>footer</div>;
      }
    }
    
  3. 基本样式实现 => App.css

    * {
      padding: 0;
      margin: 0;
      border: none;
      box-sizing: border-box;
    }
    
    button {
      position: absolute;
      right: 0;
      cursor: pointer;
    
      padding: 4px 8px;
      border-radius: 5px;
      color: #fff;
      background-color: red;
    }
    
    /* App样式 */
    .App {
      width: 400px;
      margin: 20px;
      border: 1px solid #eee;
      padding: 0 10px;
      border-radius: 5px;
      font-size: 10px;
    }
    
    /* Header */
    .header-input {
      border: 1px solid #eee;
      margin-top: 10px;
      width: 100%;
      padding: 10px;
      border-radius: 3px;
    }
    
    /* Footer */
    .footer {
      position: relative;
      display: flex;
      align-items: center;
      padding: 20px 0;
    }
    
    /* List */
    .list {
      margin-top: 5px;
      border: 1px solid #eee;
      padding: 0 10px;
    }
    
    /* Item */
    li {
      position: relative;
      display: flex;
      align-items: center;
      padding: 10px 0;
      border-bottom: 1px solid #eee;
    }
    
    li:last-child {
      border-bottom: 0;
    }
    
  4. App 内容,引入组件和样式 => App.js

    import React, { Component } from "react";
    import Header from "./components/Header";
    import List from "./components/List";
    import Footer from "./components/Footer";
    import "./App.css";
    
    export default class App extends Component {
      render() {
        return (
          <div className="App">
            <Header />
            <List />
            <Footer />
          </div>
        );
      }
    }
    
  5. Header 内容, 实现输入框 => index.jsx

    import React, { Component } from "react";
    
    export default class Header extends Component {
      render() {
        return (
          <>
            <input
              className="header-input"
              type="text"
              placeholder="请输入任务名称, 摁回车键确认"
            />
          </>
        );
      }
    }
    
  6. Footer 内容, 实现底部布局 => index.jsx

    import React, { Component } from "react";
    
    export default class Footer extends Component {
      render() {
        return (
          <div className="footer">
            <label>
              <input
                type="checkbox"
                style={{ verticalAlign: "middle", marginTop: 0 }}
              />
            </label>
            <span>
              <span>已完成0</span> / 全部0
            </span>
            <button>清除已完成任务</button>
          </div>
        );
      }
    }
    
  7. List 内容, 包裹 Item => index.jsx

    import React, { Component } from "react";
    import Item from "../Item";
    
    export default class List extends Component {
      render() {
        return (
          <div className="list">
            <Item />
            <Item />
          </div>
        );
      }
    }
    
  8. Item 列表 => index.jsx

    import React, { Component } from "react";
    
    export default class Item extends Component {
      render() {
        return (
          <>
            <li>
              <label style={{ display: "flex" }}>
                <input
                  type="checkbox"
                  style={{ verticalAlign: "middle", marginTop: 0 }}
                />
                <span>{123}</span>
              </label>
              <button style={{ display: "none" }}>删除</button>
            </li>
          </>
        );
      }
    }