记账本React案例(Redux管理状态)

文章目录

整体架构流程

环境搭建

创建项目

技术细节

一、别名路径配置

1.路径解析配置(webpack) ,将@/解析为src/

2.路径联想配置(vsCode),使用vscode编辑器时,自动联想出来src文件夹下的子级文件目录

二、实现Mock数据

1.安装json-server插件   npm i -D json-server

2.准备一个json文件

3.在package.json文件中添加启动命令

4.访问启动命令

三、配置全局路由

1.项目中新建四个文件夹

2.在router文件中配置路由

3.想要显示二级路由页面就得在一级路由页面添加组件

4.通过浏览器可访问各级页面

四、使用antD-mobile 定制主题颜色

1.去package.json中查看antd-mobile安装包,没有安装的话使用

2.创建主题css文件并配置主题色

3.配置完成后在全局引入即可

五、Redux管理账目列表

1.使用Redux管理状态,在项目中新建仓库store,并初始化状态列表,编写同步修改状态方法以及异步获取接口方法,并导出创建action对象的函数

2.在store仓库中,利用configureStore简化store的设置和配置

3.全局注册store

4.来到我们的Layout文件下通过useEffect方式调取接口

5.到浏览器控制台可查看网络

六、实现TabBar功能

1.下载安装less        

2.来到antD官网找到TabBar标签页组件(选择基础用法相关代码)并引入到layout文件下进行改写

3.在Layout文件夹下新建index.less文件并写入相关代码

七、月度账单

1.搭建月度账单静态页面,在month文件夹下

2.点击时间打开弹窗,设置弹窗开关状态并使用,给时间区域添加点击事件

3.点击确定或者取消以及点击蒙版区域都可以关闭弹窗

4.弹窗关闭时箭头朝上,打开朝上

5.点击确定时间切换

(1)创建日期状态

(2)将获取到的时间值赋值给当前状态

6.按月分组(将相同月份的日期划分为一组)

7.月度初始化时渲染当前月的数据

8.将当前月的数据以单日为单位进行统计显示

9.将单日账单渲染在列表中

(1)准备单日列表

(2)准备渲染模板数据

(3)在DailyBill中index.js文件下引入组件并使用

10.点击切换列表进行显示

(1)控制显示隐藏并添加事件进行点击取反操作

(2)根据状态适配箭头和隐藏

11.账单类型图标组件封装

(1)撰写静态组件结构

(2)根据Props适配不同图标

八、新增账单

1.支出和切换账单

(1)定义控制支出以及收入的状态

(2)添加点击切换事件并通过classNames来控制类名显示

(3)调用封装好的common中数据billListData渲染当前页面

2.实现保存订单功能

(1)构建金额状态,编写金额改变事件,创建类型状态,撰写保存事件

(2)因为react是单向数据流,所以我们可以通过自定义事件onChange来进行双向数据绑定

(3)点击根据不同的icon类型进行改变

(4)其中需要用到接口,通过redux来管理数据状态

3.添加账单选中时的样式

4.时间选择器功能

(1)添加时间选择器展开控制状态,以及点击事件并应用

(2)撰写时间选择器取消以及确定时关闭功能

(3)默认显示当前日期,当用户选择日期时将其显示出来

小结


整体架构流程

环境搭建

1.Redux状态管理  -  @reduxjs/toolkit、react-redux

2.路由 - react-router-dom

3.时间处理 - dayjs

4. class类名处理 - classnames

5.移动端组件库 - antd-mobile

6.请求插件 - axios

创建项目

1.使用npx create-react-app 你的项目名称创建react移动端项目

2.下载此次开发所需依赖包

命令:npm i @reduxjs/toolkit react-redux react-router-dom dayjs classnames antd-mobile axios

注意:下载好依赖包后可直接到package.json包中查看相关版本信息

3.启动项目

命令:npm run srart

技术细节

一、别名路径配置

1.路径解析配置(webpack) ,将@/解析为src/

(1)安装craco

(2)项目根目录下创建配置文件craco.config.js

(3)配置文件中添加路径解析配置

(4)包文件中配置启动和打包命令 

2.路径联想配置(vsCode),使用vscode编辑器时,自动联想出来src文件夹下的子级文件目录

(1)在项目根目录文件夹下建立jsconfig.json文件

)配置

二、实现Mock数据

1.安装json-server插件   npm i -D json-server

2.准备一个json文件

代码片段:

{

    "ka":[

        {

            "type":"pay",

            "money":-99,

            "date":"2024-04-17 17:21:30",

            "useFor":"drinks",

            "id":1

        },

        {

            "type":"pay",

            "money":-88,

            "date":"2024-04-17 17:22:12",

            "useFor":"longdistance",

            "id":2

        },

        {

            "type":"pay",

            "money":-56,

            "date":"2024-04-17 17:45:30",

            "useFor":"bonus",

            "id":3

        },

        {

            "type":"pay",

            "money":-57,

            "date":"2024-04-17 17:45:30",

            "useFor":"dessert",

            "id":4

        },

        {

            "type":"pay",

            "money":-35,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":5

        },

        {

            "type":"pay",

            "money":-86,

            "date":"2024-04-17 17:45:30",

            "useFor":"travel",

            "id":6

        },

        {

            "type":"pay",

            "money":-28,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":7

        },

        {

            "type":"pay",

            "money":-45,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":8

        },

        {

            "type":"pay",

            "money":-44,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":9

        },

        {

            "type":"pay",

            "money":-71,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":10

        },

        {

            "type":"pay",

            "money":-69,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":11

        },

        {

            "type":"pay",

            "money":-38,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":12

        },

        {

            "type":"pay",

            "money":-25,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":13

        },

        {

            "type":"pay",

            "money":-65,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":14

        },

        {

            "type":"pay",

            "money":-43,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":15

        },

        {

            "type":"pay",

            "money":-57,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":16

        },

        {

            "type":"pay",

            "money":-68,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":17

        },

        {

            "type":"pay",

            "money":-12,

            "date":"2024-04-17 17:45:30",

            "useFor":"drinks",

            "id":18

        }

    ]

}

3.在package.json文件中添加启动命令

4.访问启动命令

三、配置全局路由

1.项目中新建四个文件夹

2.在router文件中配置路由

3.想要显示二级路由页面就得在一级路由页面添加<Outlet />组件

4.通过浏览器可访问各级页面

四、使用antD-mobile 定制主题颜色

官网:Ant Design Mobile - Ant Design Mobile

1.去package.json中查看antd-mobile安装包,没有安装的话使用

npm install --save antd-mobile或者yarn add antd-mobile下载安装即可

2.创建主题css文件并配置主题色

3.配置完成后在全局引入即可

4.使用antD组件库时,直接引入组件即可,antd-mobile 会自动为你加载 css 样式文件

五、Redux管理账目列表

1.使用Redux管理状态,在项目中新建仓库store,并初始化状态列表,编写同步修改状态方法以及异步获取接口方法,并导出创建action对象的函数

2.在store仓库中,利用configureStore简化store的设置和配置

3.全局注册store

4.来到我们的Layout文件下通过useEffect方式调取接口

5.到浏览器控制台可查看网络

六、实现TabBar功能

实现思路:使用antD的标签栏组件进行布局并使用路由进行切换

1.下载安装less        

命令:yarn add less craco-less  

2.来到antD官网找到TabBar标签页组件(选择基础用法相关代码)并引入到layout文件下进行改写

import { useEffect } from 'react'

import { useDispatch } from 'react-redux'

import { Outlet } from 'react-router-dom'

import { getBillList } from '@/store/modules/billStore'

import { TabBar } from 'antd-mobile'

import './index.less'

import {  

  BillOutline,

  AddCircleOutline,

  CalculatorOutline,

} from 'antd-mobile-icons'

const tabs = [

  {

    key: '/month',

    title: '月度账单',

    icon: <BillOutline />,

  },

  {

    key: '/new',

    title: '记账',

    icon: <AddCircleOutline />,

  },

  {

    key: '/year',

    title: '年度账单',

    icon: <CalculatorOutline />,

  },

]

const Layout = () => {

  const dispatch = useDispatch()

  useEffect(() => {

    dispatch(getBillList())

  }, [dispatch])

  return (

    <div className="layout">

      <div className="container">

        <Outlet />

      </div>

      <div className="footer">

        <TabBar>

          {tabs.map((item) => (

            <TabBar.Item key={item.key} icon={item.icon} title={item.title} />

          ))}

        </TabBar>

      </div>

    </div>

  )

}

export default Layout

3.在Layout文件夹下新建index.less文件并写入相关代码

查看结果:

七、月度账单

功能:(1)点击进行月份的切换 (2)适配箭头的显示 (3)统计支出、收入、结余数据

1.搭建月度账单静态页面,在month文件夹下

index.js中:

import { NavBar, DatePicker } from 'antd-mobile'

import './index.less'

const Month = () => {

  return (

    <div className="monthlyBill">

      <NavBar className="nav" backArrow={false}>

        月度收支

      </NavBar>

      <div className="content">

        <div className="header">

          {/*时间切换区域 */}

          <div className="date">

            <span className="text">2023 | 3月账单</span>

            <span className="arrow expand"></span>

          </div>

          {/*统计区域 */}

          <div className="twoLineOverview">

            <div className="item">

              <span className="money">{100}</span>

              <span className="type">支出</span>

            </div>

            <div className="item">

              <span className="money">{200}</span>

              <span className="type">收入</span>

            </div>

            <div className="item">

              <span className="money">{300}</span>

              <span className="type">结余</span>

            </div>

          </div>

          {/*时间选择器 */}

          <DatePicker

            className="kaDate"

            title="记账日期"

            precision="month"

            visible={false}

            max={new Date()}

          ></DatePicker>

        </div>

      </div>

    </div>

  )

}

export default Month

index.less文件

.monthlyBill{

    --ka-text-color:#191d26;

    height:100%;

    background: linear-gradient(180deg,#fff,#f5f5f5 100%);

    background-size: 100% 240px;

    background-repeat: no-repeat;

    background-color: rgba(245,245,245,0.9);

    color:var(--ka-text-color);

    .nav{

        --adm-font-size-10:16px;

        color:#121826;

        background-color: transparent;

        .adm-nav-bar-back-arrow{

            font-size: 20px;

        }

    }

    .content{

        height:573px;

        padding:0 10px;

        overflow-y: scroll;

        -ms-overflow-style:none;

        scrollbar-width: none;

        &::-webkit-scrollbar{

            display: none;

        }

        .header{

            height: 135px;

            padding:20px 20px 0px 18.5px;

            margin-bottom: 10px;

            background: url('../../assets/images/backgroundImg.jpeg');

            background-size: 100% 100%;

            border-radius: 8px;

            .date{

                display: flex;

                align-items: center;

                margin-bottom: 25px;

                font-size: 16px;

                .arrow{

                    display: inline-block;

                    width: 7px;

                    height: 7px;

                    margin-top: -3px;

                    margin-left: 9px;

                    border-top: 2px solid #121826;

                    border-left: 2px solid #121826;

                    transform: rotate(225deg);

                    transform-origin: center;

                    transition: all 0.3s;

                }

                .arrow.expand{

                    transform: translate(0, 2px) rotate(45deg);

                }

            }

            .twoLineOverview{

                display: flex;

                justify-content: space-between;

                width:250px;

                .item{

                    display: flex;

                    flex-direction: column;

                    .money{

                        height:24px;

                        line-height: 24px;

                        margin-bottom: 5px;

                        font-size: 18px;

                    }

                    .type{

                        height: 14px;

                        line-height: 14px;

                        font-size: 12px;

                    }

                }

            }

        }

    }

}

查看结果:

2.点击时间打开弹窗,设置弹窗开关状态并使用,给时间区域添加点击事件

结果展示:

3.点击确定或者取消以及点击蒙版区域都可以关闭弹窗

4.弹窗关闭时箭头朝上,打开朝上

思路:通过弹窗的打开关闭状态来控制箭头的朝向

5.点击确定时间切换

(1)创建日期状态

(2)将获取到的时间值赋值给当前状态

因为是先选择日期然后点击确定关闭弹窗的时候这个日期需要被显示在这个时间切换区域,所以我们直接将这个日期的改变写在弹窗确定事件中即可。

结果展示:

6.按月分组(将相同月份的日期划分为一组)

注意:useMemo钩子函数在第一个参数内部发生变化的时候才会进行,如果没有发生变化,useMemo将会返回缓存的结果;useMemo的第二个参数是一个数组,包含所有被‘记忆’的值的依赖项;如果这个数组为空,useMemo将不会缓存任何值,每次渲染时都会出现计算。

查看结果:

7.月度初始化时渲染当前月的数据

使用条件判断从后端接过来的数据是否存在,若存在就直接取过来对状态进行计算

结果展示:

8.将当前月的数据以单日为单位进行统计显示

(1)准备单日账单组件

思路:在Month文件夹下建立components文件夹,然后创建DailyBill组件,

(2)将当前月的数据按照日来划分

(3)遍历数据给组件传入日期数据和当日列表数据

9.将单日账单渲染在列表中

(1)准备单日列表

(2)准备渲染模板数据

思路:在src文件夹下新建common文件

export const billListData = {

    pay: [

      {

        type: 'foods',

        name: '餐饮',

        list: [

          { type: 'food', name: '餐费' },

          { type: 'drinks', name: '酒水饮料' },

          { type: 'dessert', name: '甜品零食' },

        ],

      },

      {

        type: 'taxi',

        name: '出行交通',

        list: [

          { type: 'taxi', name: '打车租车' },

          { type: 'longdistance', name: '旅行票费' },

        ],

      },

      {

        type: 'recreation',

        name: '休闲娱乐',

        list: [

          { type: 'bodybuilding', name: '运动健身' },

          { type: 'game', name: '休闲玩乐' },

          { type: 'audio', name: '媒体影音' },

          { type: 'travel', name: '旅游度假' },

        ],

      },

      {

        type: 'daily',

        name: '日常支出',

        list: [

          { type: 'clothes', name: '衣服裤子' },

          { type: 'bag', name: '鞋帽包包' },

          { type: 'book', name: '知识学习' },

          { type: 'promote', name: '能力提升' },

          { type: 'home', name: '家装布置' },

        ],

      },

      {

        type: 'other',

        name: '其他支出',

        list: [{ type: 'community', name: '社区缴费' }],

      },

    ],

    income: [

      {

        type: 'professional',

        name: '其他支出',

        list: [

          { type: 'salary', name: '工资' },

          { type: 'overtimepay', name: '加班' },

          { type: 'bonus', name: '奖金' },

        ],

      },

      {

        type: 'other',

        name: '其他收入',

        list: [

          { type: 'financial', name: '理财收入' },

          { type: 'cashgift', name: '礼金收入' },

        ],

      },

    ],

  }

export const billTypeToName = Object.keys(billListData).reduce((prev, key) => {

    billListData[key].forEach(bill => {

      bill.list.forEach(item => {

        prev[item.type] = item.name

      })

    })

    return prev

}, {})

(3)在DailyBill中index.js文件下引入组件并使用

查看结果:

10.点击切换列表进行显示

(1)控制显示隐藏并添加事件进行点击取反操作

(2)根据状态适配箭头和隐藏

效果展示:

点击前:

点击后:

11.账单类型图标组件封装

功能:根据不同的账单类型系那是不一样的图标

(1)撰写静态组件结构

(2)根据Props适配不同图标

八、新增账单

1.支出和切换账单

(1)定义控制支出以及收入的状态

(2)添加点击切换事件并通过classNames来控制类名显示

(3)调用封装好的common中数据billListData渲染当前页面

结果展示:点击支出或收入展示相应页面内容

2.实现保存订单功能

(1)构建金额状态,编写金额改变事件,创建类型状态,撰写保存事件

(2)因为react是单向数据流,所以我们可以通过自定义事件onChange来进行双向数据绑定

(3)点击根据不同的icon类型进行改变

(4)其中需要用到接口,通过redux来管理数据状态

来到billStore文件中,撰写同步修改状态的getBill方法以及这个post接口方法(请求数据)

查看效果:在输入框输入1300元,用于(点击)能力提升,再点击确定就好啦

紧接着我们到月度账单页面下查看最终结果

3.添加账单选中时的样式

思路:判断当前所选中的类型是否是存在于数据仓库中,是的话就添加selected样式

效果:

4.时间选择器功能

(1)添加时间选择器展开控制状态,以及点击事件并应用

(2)撰写时间选择器取消以及确定时关闭功能

给时间选择器添加取消以及确定事件,更新保存事件(为了提升用户体验度,我们在这里将用户所选择的日期进行保存)

查看效果:

保存前:

保存后:

(3)默认显示当前日期,当用户选择日期时将其显示出来

引入dayjs,使用format方法将当前日期格式进行转换并显示到记账本页面

查看效果:

小结

          通过本次案例我们可以巩固使用react高频场景,其中包括JSX中使用JS表达式以及列表渲染、react基础事件绑定、正确使用事件对象参数、传递自定义参数以及这个react组件的正确使用;除此之外呢,我们还可以使用useState向组件内添加一个状态,从而控制组件渲染的结果。大家还可以通过本次案例加深我们对classnames优化类名的一个控制、受控表单的绑定、使用useEffect来调用接口(其中包括get请求以及post请求)、组件间的通信、自定义Hook函数的使用、Ant Design Mobile组件库的使用以及我们必会的Redux正确操作流程等。为了方便大家学习呢,我直接将整个项目打包,有需要的可以自取,大家拿到这个项目后直接npm install安装下依赖,先启动服务器npm run server再启动npm run start项目即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【java数据结构-优先级队列向下调整Topk问题,堆的常用的接口详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 …

SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention多变量时间序列预测

SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention秃鹰算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测 目录 SCI一区级 | Matlab实现BES-CNN-GRU-Mutilhead-Attention秃鹰算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测预测效果基本介绍…

【C++杂货铺】多态

目录 &#x1f308;前言&#x1f308; &#x1f4c1;多态的概念 &#x1f4c1; 多态的定义及实现 &#x1f4c2; 多态的构成条件 &#x1f4c2; 虚函数 &#x1f4c2; 虚函数重写 &#x1f4c2; C11 override 和 final &#x1f4c2; 重载&#xff0c;覆盖&#xff08;重写…

力扣-1832.判断句子是否全为字母句

思路: 首先&#xff0c;我们初始化了一个长度为 26 的布尔值列表 exist&#xff0c;所有值都为 False&#xff0c;表示所有字母初始都未出现过。然后&#xff0c;我们遍历输入的字符串 sentence 中的每个字符。对于每个字符&#xff0c;我们通过计算其 ASCII 码值减去字母 a 的…

微信小程序关于主包大小不能超过1.5MB的问题

常规的解决办法有以下几种 1、把资源文件改成远程服务器的&#xff0c;比如png这些 2、进入如图的分析页面&#xff0c;能明确知道你哪个插件包太大&#xff0c;我这里之前echart的包就1mb&#xff0c;现在给他缩减到了500kb的样子 3、解决vant等npm包太大的问题&#xff0c…

用过最佳的wordpress模板

西瓜红&#xff0c;作为一种充满活力和激情的颜色&#xff0c;总是能给人留下深刻的印象。当这种鲜艳的色彩与经典的设计元素相结合时&#xff0c;就能打造出一款既时尚又实用的WordPress企业模板。今天&#xff0c;我们向您隆重推荐这款西瓜红经典配色WordPress企业模板。 这…

HarmonyOS-Next开源三方库 MPChart:打造出色的图表体验

点击下载源码https://download.csdn.net/download/liuhaikang/89228765 简介 随着移动应用的不断发展&#xff0c;数据可视化成为提高用户体验和数据交流的重要手段之一。在 OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;应用开发中&#xff0c;一个强大而…

MIS微调SAM模型实时交互UI界面

前言 SAM模型的基本介绍可见SAM&#xff08;Segment Anything Model&#xff09;大模型使用--point prompt_sam大模型-CSDN博客 针对Meta团队去年发布的SAM大模型在医学图像分割领域表现性能较差的情况&#xff0c;笔者收集了一些MIS领域的数据集对SAM的架构进行fine tune&am…

架构师系列- 定时任务(四)- XXl-Job

XXL-JOB是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展&#xff0c;其中“XXL”是主要作者&#xff0c;大众点评许雪里名字的缩写 和ElasticJob的区别 相同点 E-Job和X-job都有普遍的用户基础和完整的技术文档&#xff0c;都…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.6-1.8

目录 第一门课&#xff1a;第二门课 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)…

某赛通电子文档安全管理系统 多处 SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

【智能算法】向日葵优化算法(SFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2019年&#xff0c;GF Gomes等人受到自然界向日葵运动行为启发&#xff0c;提出了向日葵优化算法&#xff08;Sunflower Optimization, SFO&#xff09;。 2.算法原理 2.1算法思想 SFO模拟向日葵行…

Android某钉数据库的解密分析

声明 1 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 目的 1 解密app数据库&#xff0c;用数据库软件打开查看信息内容 入手…

C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端等介绍

文章目录 前言一、数据类型的介绍类型的意义 1. 类型的基本归类&#xff08;1&#xff09;. 整型家族&#xff08;2&#xff09;. 浮点数家族&#xff08;3&#xff09;. 构造类型&#xff08;4&#xff09;. 指针类型&#xff08;5&#xff09;. 空类型 二、整型在内存中的存储…

【网络安全】安全事件管理处置 — 安全事件处置思路指导

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、处理DDOS事件 1.准备工作 2.预防工作 3.检测与分析 4.限制、消除 5.证据收集 二、处理恶意代码事件 1.准备 2.预防 3.检测与分析 4.限制 5.证据收集 6.消除与恢复 …

NodeJS基础知识

文章目录 **1. Node.js平台与架构****1.1 Node.js简介****1.2 事件循环&#xff08;Event Loop&#xff09;** **2. JavaScript基础知识****2.1 ECMAScript版本****2.2 变量、数据类型、运算符****2.3 函数****2.4 类与面向对象编程** **3. Node.js核心API****3.1 全局对象与内…

Linux下载及安装OpenSSL

文章目录 前言一、OpenSSL下载二、OpenSSL安装1.上传下载好的安装包到服务器2.解压3.切换目录4.配置config5.编译6.安装7.备份旧版本OpenSSL7.创建软链接8.添加OpenSSL动态链接库9.更新库缓存10.查看OpenSSL版本验证安装是否成功 前言 一般系统会自带有OpenSSL&#xff0c;我们…

OpenHarmony实战开发-媒体查询 (@ohos.mediaquery)

概述 媒体查询作为响应式设计的核心&#xff0c;在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景&#xff1a; 针对设备和应用的属性信息&#xff08;比如显示区域、深浅色、分辨率&#xff09;&#xff0…

大数据第五天(操作hive的方式)

文章目录 操作hive的方式hive 存储位置hive 操作语法创建数据表的方式 操作hive的方式 hive 存储位置 hive 操作语法 创建数据表的方式 – 创建数据库 create database if not exists test我们创建数据库表的时候&#xff0c;hive是将我们的数据自动添加到数据表中&#xf…

Matlab|交直流系统潮流计算(含5种控制模式)

目录 1 主要内容 程序参考流程图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《交直流系统潮流计算及相互关联特性分析》&#xff0c;采用5种交直流潮流控制方式&#xff1a;1.定电流定电压 2.定电流定熄弧角 3.定功率定电压 4.定功率定熄弧角 5.定触发角…