React小项目-题解列表

news2024/10/5 4:34:52

1. 项目初始化

首先创建一个新项目 solution-app

npx create-react-app solution-app
cd solution-app
npm start

先将 src 目录中除了 index.cssindex.js 之外的文件删除,然后创建一个 components 目录,在该目录中创建一个 solution.jsx 文件:

import React, { Component } from 'react';

class Solution extends Component {
    state = {  } 
    render() { 
        return (<h1>Hello World</h1>);
    }
}
 
export default Solution;

然后修改 index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import Solution from './components/solution';

const root = ReactDOM.createRoot(document.getElementById('root'));  // 获取div同时创建为一个React对象
root.render(
  <React.StrictMode>
    <Solution />
  </React.StrictMode>
);

2. Bootstrap相关组件使用

在当前项目的根目录下输入以下指令安装 Bootstrap:

npm install bootstrap

在 Bootstrap 的文档中搜索 Navbar,该组件中有个很重要的东西叫 container,可以自适应地改变区域大小,因此我们可以将所有内容放到 container 中:

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import Solution from './components/solution';
import 'bootstrap/dist/css/bootstrap.css'

const root = ReactDOM.createRoot(document.getElementById('root'));  // 获取div同时创建为一个React对象
root.render(
  <React.StrictMode>
    <div className='container'>
      <Solution />
    </div>
  </React.StrictMode>
);

我们可以使用 Bootstrap 中的 Table:

在这里插入图片描述

可以用如下的方式更简洁地创建 HTML 结构:

在这里插入图片描述

创建完 Table 后的 solution.jsx 代码如下:

import React, { Component } from 'react';

class Solution extends Component {
    state = { 
        solutions: [
            {number: 1164, title: '加工零件1', difficulty: '简单', views: 2937},
            {number: 1165, title: '加工零件2', difficulty: '简单', views: 2938},
            {number: 1166, title: '加工零件3', difficulty: '简单', views: 2939},
            {number: 1167, title: '加工零件4', difficulty: '简单', views: 2940},
            {number: 1168, title: '加工零件5', difficulty: '简单', views: 2941},
            {number: 1169, title: '加工零件6', difficulty: '简单', views: 2942},
            {number: 1170, title: '加工零件7', difficulty: '简单', views: 2943},
            {number: 1171, title: '加工零件8', difficulty: '简单', views: 2944}
        ]
    };

    render() { 
        return (
            <table className='table table-striped'>
                <thead>
                    <tr>
                        <th>#</th>
                        <th>标题</th>
                        <th>难度</th>
                        <th>阅读</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    {this.state.solutions.map(solution => (  // 遍历所有solutions
                        <tr key={solution.number}>
                            <td>{solution.number}</td>
                            <td>{solution.title}</td>
                            <td>{solution.difficulty}</td>
                            <td>{solution.views}</td>
                            <td><button className='btn btn-danger'>删除</button></td>
                        </tr>
                    ))}
                </tbody>
            </table>
        );
    }
}
 
export default Solution;

现在我们实现删除功能:

import React, { Component } from 'react';

class Solution extends Component {
    state = { 
        solutions: [
            {number: 1164, title: '加工零件1', difficulty: '简单', views: 2937},
            {number: 1165, title: '加工零件2', difficulty: '简单', views: 2938},
            {number: 1166, title: '加工零件3', difficulty: '简单', views: 2939},
            {number: 1167, title: '加工零件4', difficulty: '简单', views: 2940},
            {number: 1168, title: '加工零件5', difficulty: '简单', views: 2941},
            {number: 1169, title: '加工零件6', difficulty: '简单', views: 2942},
            {number: 1170, title: '加工零件7', difficulty: '简单', views: 2943},
            {number: 1171, title: '加工零件8', difficulty: '简单', views: 2944}
        ]
    };

    handleDelete = (number) => {
        // 遍历一遍state.solutions,将solution.number不为传入的参数number的数据保留下来
        const res = this.state.solutions.filter(solution => solution.number !== number);
        this.setState({
            solutions: res
        });
    }

    render() {
        if (this.state.solutions.length === 0) {
            return <h1>没有题解了!</h1>;
        }
         
        return (
            <table className='table table-striped'>
                <thead>
                    <tr>
                        <th>#</th>
                        <th>标题</th>
                        <th>难度</th>
                        <th>阅读</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    {this.state.solutions.map(solution => (  // 遍历所有solutions
                        <tr key={solution.number}>
                            <td>{solution.number}</td>
                            <td>{solution.title}</td>
                            <td>{solution.difficulty}</td>
                            <td>{solution.views}</td>
                            <td><button onClick={() => this.handleDelete(solution.number)} className='btn btn-danger'>删除</button></td>
                        </tr>
                    ))}
                </tbody>
            </table>
        );
    }
}
 
export default Solution;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析舆情监测系统

舆情及内容简述 大家对于“舆情”应该有一个简单地概念&#xff0c;尤其是在现在微博、微信、知乎、抖音等平台普及化的今天&#xff0c;舆情的力量日渐凸显。比如最近萧敬腾的求婚、《消失的她》的热议、ikun的翻车等等&#xff0c;舆情既可以让明星塌房&#xff0c;也会让一…

Android Compose UI实战练手----Google Bloom登录页

目录 1.概述2.页面展示1.1 亮色主题1.2暗色主题 3.登录页面拆分以及编码实现3.1 登录页面拆分3.2 编码实现3.2.1 LoginPage3.2.2 LoginTitle3.2.3 LoginInoutBox3.2.4 LoginHintWithUnderLine3.2.5 LoginButton 4.源码地址 1.概述 在之前的章节中我们已经介绍了如何实现Google…

每个前端开发需要了解的10个强大的CSS属性

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

vue 启动项目报错:TypeError: Cannot set property ‘parent‘ of undefined异常解决

场景&#xff1a;从git上面拉下来一个项目 npm i 下载完依赖以后 npm run serve 去运行项目的时候 报错TypeError: Cannot set property ‘parent’ of undefined 如图所示 原因&#xff1a;首先排查发现判断得出是less解析失败导致 但是经过长时间的查询解决方案发现是因为v…

【Redis一】Redis简介及安装部署

Redis简介及安装部署 1.关系数据库 VS 非关系型数据库1.1 关系型数据库1.2 非关系型数据库1.3 关系型数据库和非关系型数据库区别1.4 非关系型数据库产生背景1.5 关系型数据库与非关系型数据库总结 2.Redis简介2.1 Redis概述2.2 Redis的优点2.3 Redis使用场景2.4 关于Redis的高…

nginx配置vue项目添加访问前缀

文章目录 前言实现需求Nginx配置访问前端正确配置注意点alias的含义举个栗子静态文件及js等404错误 前言 最近&#xff0c;在搞一个SASS系统&#xff0c;将原有的单服务&#xff0c;每次卖出一套啥软件就需要部署一套环境&#xff0c;使得运维人员有些捉襟见肘。产品调整为SAS…

链表理论基础

链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域&#xff0c;一个是指针域&#xff08;存放指向下一节点的指针&#xff09;。 链表的类型 单链表 每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xf…

汽车 EDI:博泽 brose EDI 需求分析

brose&#xff08;博泽&#xff09;是一家德国汽车零部件制造商&#xff0c;总部位于德国科堡。该公司成立于1908年&#xff0c;至今已有百年历史。brose主要专注于汽车驾驶员控制系统、座椅系统、电动驱动系统和电子技术等领域的开发和生产。作为一家全球化企业&#xff0c;br…

linux修改root密码

Linux修改root密码 红帽系统&#xff1a; 进入开机界面按e。 在linux这行末尾加上rd.break 然后按下ctrlx 按下图输入命令&#xff1a; redhat 即为你想修改的密码。 然后回车等待系统重启。 CentOS7: 前两步和之前一样&#xff0c;然后找到linux16这一行。 在这行末尾…

芯片设计中的功耗挑战和低功耗设计

在早期的IC设计中&#xff0c;关注的参数主要是性能(timing)和面积(area)。EDA工具在满足性能要求的情况下&#xff0c;最小化面积。此时&#xff0c;功耗是一个不怎么被关心的问题。 因为CMOS工艺在相对较低的时钟频率下具有相当低的功耗&#xff0c;漏电流可忽略不计。随着晶…

springboot+vue校园车辆校车调度管理系统_r4le2-

本论文中实现的校车调度管理系统将以用户核心的日常信息维护工作为主&#xff0c;主要涵盖了首页&#xff0c;个人中心&#xff0c;驾驶员管理&#xff0c;车辆信息管理&#xff0c;借调车辆管理&#xff0c;车辆调度管理&#xff0c;车辆运营管理等功能&#xff0c;采用该校车…

浏览器如何捕获元素的hover事件弹出的内容,并进行样式调整修改

项目场景&#xff1a; 最近前端需要重写antd的tab卡片的更多内容弹框&#xff0c;默认的背景色和文本颜色不合适&#xff0c;需要更改。 问题描述 只有鼠标指针放上去后才会显示弹出的内容 直接用审查元素还无法进行获取。 如何用浏览器的开发者工具去捕获这些浮框内容或其他…

js中的图是什么?

图 什么是图&#xff1f; 图是网络结构的抽象模型&#xff0c;是一组由边连接的节点。图可以表示任何二元关系&#xff0c;比如道路、航班等。在 JavaScript 中没有图&#xff0c;但是可以通过 Object 和 Array 来构建图。 常用操作 深度优先遍历广度优先遍历 图的表示法 …

sql内外连接图示

student表数据&#xff1a; idname34name22golitter66kerwin123yh12golemon score表数据&#xff1a; idscore34802298663345100 内连接 1、内连接:俗称左右拼接连接&#xff1b; 2、内连接特点&#xff1a;满足连接条件的才会出现在结果里面&#xff1b; SELECT 查询字段…

第 7 章 集合-----Scala集合继承图

7.1.1 不可变集合继承图 7.1.2 可变集合继承图 7.2.3 不可变数组与可变数组的转换 7.7.6 复杂 WordCount 案例 1&#xff09;方式一 object TestWordCount {def main(args: Array[String]): Unit {// 第一种方式&#xff08;不通用&#xff09;val tupleList List(("H…

WebRTC的认知入门

一、学习目的 当前的音视频聊天功能很普通&#xff0c;社会对这方面的需求也很高&#xff0c;疫情期间的在线问诊模式解决类大量急需就医问诊患者的燃眉之急&#xff0c;我们需要了解WebRTC实现实时音视频聊天功能是如何操作的。 二、概念 什么是WebRTC?WebRTC是 Google 在…

开放式耳机是什么意思?开放式耳机和封闭式耳机区别又有哪些?

开放式蓝牙耳机的设计理念旨在为用户提供更加自然、开放的音频体验。与传统的封闭式耳机相比&#xff0c;开放式耳机的设计目的是最大程度地减少音频在耳道中的阻隔&#xff0c;使周围环境的声音与耳机音频混合在一起&#xff0c;创造更加逼真的音场感。 开放式蓝牙耳机非常适合…

6.3.2 可翻页检视

前面提到的 nl 与 cat, tac 等等&#xff0c;都是一次性的将数据一口气显示到屏幕上面。一页一页翻动的指令就是more和less。 more &#xff08;一页一页翻动&#xff09; 看到上面的范例&#xff0c;如果more后面接的文件内容行数大于屏幕输出的行数时&#xff0c;就会出现类…

Hello算法笔记之回溯

一、回溯算法介绍&#xff1a;一种通过穷举来解决问题的方法&#xff0c;它的核心思想是从一个初始状态出发&#xff0c;暴力搜索所有可能的解决方案&#xff0c;当遇到正确的解则将其记录&#xff0c;直到找到解或者尝试了所有可能的选择都无法找到解为止。 通常采用「深度优…

【论文阅读】【yolo系列】YOLACT Real-time Instance Segmentation

论文链接&#xff1a;https://arxiv.org/pdf/1904.02689.pdf Abstract 我们提出了一个简单的、全卷积的实时实例分割模型&#xff0c; 【速度和精度】该模型在TitanXp上训练MSCOCO数据集以33.5帧ps的速度达到29.8 mAP&#xff0c;比以往任何竞争方法都要快得多。此外&#xff0…