react项目中的参数解构_一天入门React学习心得

一天入门React学习心得

640?wx_fmt=png

阅读前必读

本文写的仓促,算是一个学习笔记吧,算是一个入门级的学习文章。如果你刚刚入门,那么可能一些入门的视频可能更加适合你。但如果具备一些知识,比如Vue,那么视频就不适合了。建议看完本篇文章在脑海中过一遍映像,在去官网深读,和一些深入文章,想来会有非常好的提升。

一个框架不是看几篇文章,写写Demo就能说自己会,熟悉。需要不断实践,踩坑,学习原理。多想才能掌握。我只是结合Vue进行的React学习,只是冰山一角罢了。充其量只是API的搬运工。

- - QAQ

初始化项目

新手还是推荐官方的脚手架,通过npx来进行项目的初始化一个demo项目。

npx create-react-app 项目名称

默认生成的目录情况下,项目的解构就是这样的。

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----          20.6.15     14:21                public
d-----          20.6.15     16:41                src
-a----          20.6.15     14:21            310 .gitignore
-a----          20.6.15     14:22            746 package.json
-a----          20.6.15     14:21           2884 README.md
-a----          20.6.15     14:22         526017 yarn.lock

随后通过npm 或者 yarn 来将项目跑起来。执行shell后会自动打开一个浏览器,当看到localhost:3000渲染后。那么就可以开启React大门了

#  npm shell 命令
npm run start

# yarn shell 命令
yarn start

React元素渲染-JSX

Vuetemplate模板得到大量的使用,只要你会写HTML那么应该难不倒你这个小机灵鬼。而React则是使用了在函数中直接返回DOM。看起来非常的神奇,也导致了一些小伙伴在入门的时候会有点摸不着头脑,但是如果有一定基础,在Vue中写过了Render 函数的话,我想上手起来还是非常容易的。它看起来是下面这个样子的。其本质上就是一个createElement的过程。所以,将这种模板的渲染方式称之为JSX

import React from 'react';
import './App.css';

function App() {
  return (
    <div className="App"><h1>你好呀h1><p>今天又是充满希望的一天...p>div>
  );
}
export default App;

通过React的JSX模板引擎,最终将其渲染到DOM上

4956611e14f321f42ab37916026a7b7c.png

变量绑定

Vue的模板中,通过{{}}两个花括号来声明约束,表示这个声明中的字段是一个js的值,而不是一个文本。在React则是使用了{}一个花括号来做约定。那么就可以在DOM中使用js了。下面是一个Class组件,将statetext值绑定在DOM的。

class App extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      text: '我是wangly19'
    }
  }

  updateText () {
    this.setState({
      text: '我是帅气的wangly19'
    })
  }

  render () {
    return (
      <div className="App"><p>我是一个动态的数据: {this.state.text}p><button onClick={ this.updateText.bind(this) }>更换button>div>
    )
  }
}
4d89e5b6e13c565e61f2f860dbbada8b.png
结果

条件渲染

Vue中,如果需要动态的渲染一个节点,是通过v-if指令来实现的,在React中呢,可以使用运算符来渲染元素。通过Vue来做一个对比吧。

通过&&(或)运算符来达到v-if的一样效果。

- - QAQ
render () {
  return (
    <div className="App"><p>我是一个动态的数据: {this.state.text}p>
      {/* { <p v-if="true">2p> } */}
      {true && <p>2p>}div>
  )
}

通过三元运算符可以来达到v-ifv-else一样的效果。

- - QAQ
render () {
  return (
    <div className="App"><p>我是一个动态的数据: {this.state.text}p>
      {/* { <p v-if="true">2p> } */}
      {true ? <p>truep> : <p>falsep>}div>
  )
}

列表渲染

通过map方法来遍历一些基本数据结构的节点。

通过数据结构自带的map可以遍历出value,index,keyreturn中返回节点信息。

- - QAQ
308563dd6225ecd766837815725c4ddf.png

事件处理

JavaScript中,通过onClick来绑定一个事件。

<button onclick="activeBuff">激活按钮button>

而在jsx中,则是通过onClick属性,且后面加一个jsx渲染模板的方式。

需要注意的是,Class组件下的this是不存在的,需要用户手动为方法绑定this,在调用的点击事件方法。

- - QAQ
this.activeBuff.bind(this) }>激活按钮</button>

组件

众所周知,VueReact都是组件化解决方案,那么在React中是如何创建一个组件的呢?在React新版本中,推出了React Hooks方案。所以现在主流的还是Class组件和Function组件。

Class组件

Class组件的创建方式非常的简单,只需要创建一个Class类并且让它继承React.Component,在Render方法中return出JSX的模板。

同时通过构造函数,处理Props。并且声明state状态初始化一个对象,将Props挂载到super上。

class App extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
    }
  }
  // render函数
  render () {
    return (
      <div className="App"><p>我是Class组件p>div>
    )
  }
}

Function组件

随着React Hooks发布,开发的主流也渐渐的转入了函数组件,不过Class组件在旧项目中还是会用的。所以都学习一下。对比Class组件,函数组件就非常的简单了。在函数内部返回一个render模板就OK了。如下:

import React from 'react'

function FunctionDemo () {
  return (
    <div>
      我是函数组件div>
  )
}

export default FunctionDemo

Class组件State状态

这里着重的开个单章,主要是Class组件中的State值更改,因为函数组件最好使用的是hooks,所以单拎出来主要解一下Class组件下State状态。在React不建议直接修改State的值,而是使用setState的方式更新状态。

this.setState({
  default: '修改后的文件'
})

同样的,setState后当前的值并不会直接改变。它是一个异步函数,在异步函数中可以拿到最新的状态。

f2653ea9280962502bb8db12575f503e.png

如果需要进行计算值的累加,推荐使用的是通过函数的返回值形式。

这里的原理类似Vue的组件data的函数return方式。如果使用对象方式的话,在多个setState使用的话会被后面的任务覆盖,从而直接执行一次

- - QAQ
// no
this.setState({ index: this.state.index + 1 });
this.setState({ index: this.state.index + 1 });

// yes
this.setState({ index: this.state.index + 1 });
    this.setState({ index: this.state.index + 1 });
this.setState((prevState, props) => {
  return {quantity: prevState.quantity + 1};
});
98efac5b933ca41b279824b8ea0062ec.png
f9d8a26f85a93de4f3b8ed9d95a466c5.png

组件通信

组件通信是开发中经常用到的功能,可谓是灵魂之一了。那么React的组件通信是如何完成的呢?

子组件获取父组件的值 Props

通过Props可以使子组件非常快捷的拿到父组件的传递过去的内容。

  • 1.在子组件上添加属性名称和数据
"wangly19">ClassDemo>
  • 2.在Class中使用Props
constructor (props) {
  super(props)
  this.state = {
    defaultText: '我是默认的文字'
  }
}
  • 3.使用

通过this.props.父组件绑定的属性名称

{ this.props.name }</p>

定义默认的Props属性

Vue中可以定义Props的默认值,哪怕用户没有传递,就会显示默认Props中定义的内容。

ClassDemo.defaultProps = {
  name: '我是默认的名称'
  // ... 参数列表
}
e1d2cc25b9420a5aafd4de1fb4323cc4.png

子组件传递父组件

通过Props传递一个函数,当子组件需要改变父组件的值时,通过this.props.[函数]执行回调。

// 父组件
class App extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      childMessage: '2222222222222222'
    }
  }

  onPropChange (newVal) {
    this.setState({
      childMessage: newVal
    })
  }

  render () {
    return (
      <div className="App"><p>{ this.state.childMessage }p><ClassDemo onPropChange={ this.onPropChange.bind(this) }>ClassDemo>
        {/* <FunctionDemo>FunctionDemo> */}div>
    )
  }
}
import React from 'react';

class ClassDemo extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      defaultText: '我是默认的文字'
    }
  }

  changeText () {
    this.props.onPropChange('111111111111111')
  }

  render () {
    return (
      <div className="App"><button onClick={ this.changeText.bind(this) }>更改文本button>div>
    )
  }
}
export default ClassDemo;
63622d33e935dc206b968ab62be38e03.png

生命周期

看了官方的生命周期介绍,挺简洁的。分别是组件模板选然后,已经准备就绪的时候,可以做组件加载后的一些逻辑操作,镇楼神图。

290c0bf44c2567023d37572aafe8f2e2.png
镇楼神图
6808da4180a2d284baf598209aac0d75.png

挂载

constructor

构造函数初始化,最先被执行,初始化State等等。

getDerivedStateFromProps

这是一个静态方法,需要在前面增加static的属性

render

渲染函数,返回渲染的内容,当页面产生更新也会触发该方法。

componentDidMount

组件挂载之后,这个时候组件已经挂载完毕了

更新

getDerivedStateFromProps

组件即将被更新,这里参数分别对应前后被修改的内容,通过返回一个布尔值告知是否需要更新视图。

render

当视图更新,那么Render也会重新更新

getSnapshotBeforeUpdate

getSnapshotBeforeUpdaterender之后componentDidUpdate之前输出,类似于中间件用来做一些捕获操作。

componentDidUpdate

getSnapshotBeforeUpdate,有三个参数prevPropsprevStatesnapshot,表示之前的props,之前的state,和snapshotsnapshotgetSnapshotBeforeUpdate返回的值

constructor (props) {
  super(props)
  this.state = {}
  console.log('1.constructor构造函数')
}

componentDidMount () {
  console.log('componentDidMount')
  Store.subscribe(() => {
    this.setState({})
  })
}

static getDerivedStateFromProps (nextProps, prevState) {
  console.log('getDerivedStateFromProps')
  console.log(nextProps, prevState)
  return true
}

getSnapshotBeforeUpdate (prevProps, prevState) {
  console.log(prevProps, prevState)
  return 'top: 200'
}

componentDidUpdate (prevProps, prevState, snapshot) {
  console.log(prevProps, prevState, snapshot)
}

componentWillUnmount () {
  console.log('componentWillUnmount')
}

changeText () {
  Store.dispatch({
    type: 'changeName',
    value: '我是ClassDemo中修改的名字:wangly'
  })
}

render () {
  console.log('3.render函数')
  return (
    <div className="App"><p>{ Store.getState().redux_name }p>
      { this.state.redux_name }<button onClick={ this.changeText.bind(this) }>更改文本button>div>
  )
}

卸载

componentWillUnmount

组件卸载,我们可以清除一些定时器,取消网络请求。

组件插槽

插槽对于Vue来说并不是很陌生,在React中插入的节点会以Props的方式传递。可以通过pro1ps.children找到并且渲染出来。

// 父亲组件
this.onPropChange.bind(this)}><h1>插入的元素 h1>ClassDemo>// 子组件<div className="App">
  {this.props.children}<button onClick={this.changeText.bind(this)}>更改文本button>div>

Router路由

路由对于SPA应用来讲可谓是重中之重,没有它的话,那么这个页面也就不能成为应用,只能称之为页面。两者可谓天差地别。

安装react-router-dom --save

# shell
npm install react-router-dom --save

创建路由模式

在Vue中都知道路由的mode有两种,一种是hash一种是history模式。分别如下,通过引入不同的包来创建不同的Router


// histoty
import { BrowserRouter as Router, Link, Route } from 'react-router-dom';
// hash
import { Link, Route, HashRouter as Router } from 'react-router-dom';

创建一个简单的路由

通过as出来的Router包裹路由快,通过Link作为跳转的行为容器。这样一个基本的路由容器就完成。

需要通过使Route进行对组件的声明配置,才能被Link找到哦。

- - QAQ
import React from 'react';
// histoty
import { BrowserRouter as Router, Link, Route } from 'react-router-dom';
// hash
// import { Link, Route, HashRouter as Router } from 'react-router-dom';

function Page1 () {
  return (
    <h1>我是Page1h1>
  )
}

function Page2 () {
  return (
    <h1>我是Page2h1>
  )
}

function Page3 () {
  return (
    <h1>我是Page3h1>
  )
}

class App extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
    }
  }

  render () {
    return (
      <div className="App"><Router><ul><li><Link to="page1">Page1Link>li><li><Link to="page2">Page2Link>li><li><Link to="page3">Page3Link>li>ul><Route exact path="/page1" component={ Page1 }>Route><Route exact path="/page2" component={ Page2 }>Route><Route exact path="/page3" component={ Page3 }>Route>Router>div>
    )
  }
}
export default App;

路由传值

路由传递参数一般使用paramquery参数。通过给to传递一个对象的方式来进行数据的传递。可以看到,向page1的路由上添加了一个:id表示需要传递paramid的值,同时声明了search的文本和state对象多种方式传递了参数。以便根据不同的场景使用。

;<div className="App"><Router><ul><li><Linkto={{pathname: '/page1/10',search: '?roles=[10, 20]',state: { name: 'wangly19' },
          }}
        >
          Page1Link>li><li><Link to="page2">Page2Link>li><li><Link to="page3">Page3Link>li>ul><Route exact path="/page1/:id" component={Page1}>Route><Route exact path="/page2" component={Page2}>Route><Route exact path="/page3" component={Page3}>Route>Router>div>

bbad6e5975b92b01d55924d3cd9a6b54.png

手动跳转

当你使用History路由的时候,某些时候需要主动的跳转道某个路由,这个时候又不能去触发节点行为,所以这个时候就可以通过API的方式,进行跳转。使用方式和Vue大差不差。

// 跳转页面
this.props.history.push(参数和to的内容像素)
this.props.history.push('page1')

// 重定向页面
this.props.history.replace('page2')

当然还有hashgo方法。

Redux状态管理

Redux是类似于Vuex的一个全局状态解决方案,它的功能主要是用来存储公有全局状态。来方便管理一些共有配置参数,解决业务体积大,结构复杂的项目提供好的状态管理。

如果项目不是特别需要,尽量不去使用它。

- - QAQ

安装Redux

# shell
npm install redux --save

创建Store State

看到官方的Demo,是非常容易懂的。下面是官方的代码,一眼就能看出流程。

import { createStore } from 'redux'

/**
 * This is a reducer, a pure function with (state, action) => state signature.
 * It describes how an action transforms the state into the next state.
 *
 * The shape of the state is up to you: it can be a primitive, an array, an object,
 * or even an Immutable.js data structure. The only important part is that you should
 * not mutate the state object, but return a new object if the state changes.
 *
 * In this example, we use a `switch` statement and strings, but you can use a helper that
 * follows a different convention (such as function maps) if it makes sense for your
 * project.
 */
function counter(state = 0, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1
    case 'DECREMENT':
      return state - 1
    default:
      return state
  }
}

// Create a Redux store holding the state of your app.
// Its API is { subscribe, dispatch, getState }.
let store = createStore(counter)

// You can use subscribe() to update the UI in response to state changes.
// Normally you'd use a view binding library (e.g. React Redux) rather than subscribe() directly.
// However it can also be handy to persist the current state in the localStorage.

store.subscribe(() => console.log(store.getState()))

// The only way to mutate the internal state is to dispatch an action.
// The actions can be serialized, logged or stored and later replayed.
store.dispatch({ type: 'INCREMENT' })
// 1
store.dispatch({ type: 'INCREMENT' })
// 2
store.dispatch({ type: 'DECREMENT' })
// 1
  • 创建Stoge
// 声明默认的State状态值
const modeStore = {
  redux_name: '我是Redux中声明的名称:wangly19'
}
// 声明Reducer
const reducer = (state = modeStore, action) => {
  return state
}
// createStore
import { createStore } from 'redux';
import reducer from './reducer'
const store = createStore(reducer)
export default store
  • 视图渲染
import Store from './index'

{ Store.getState().redux_name }


  • 触发更新行为dispatch
this.changeText.bind(this) }>更改文本</button>
// dispatch
changeText () {
  Store.dispatch({
    type: 'changeName',
    value: '我是ClassDemo中修改的名字:wangly'
  })
}

前提是,需要对action的方法做一个声明。类似于Vuex的Action

const reducer = (state = modeStore, action) => {
  switch (action.type) {
    case 'changeName':
      const newState = {...state}
      console.log(state)
      newState.redux_name = action.value
      console.log(newState)
      console.log(state)
      return newState
  
    default:
      return state;
  }
}
  • 监听变化。

作为行为触发行为后更新视图的凭证。在组件注销时,注意销毁它哦。

- - QAQ
componentDidMount () {
  /**
   * 回调函数
   */
  Store.subscribe(() => {
    console.log(Store.getState().redux_name)
    this.setState({})
  })
}

Hooks

Hooks我准备写新的文章。

- - QAQ

总结

学习React很多都是以Vue的思路先入个门,不至于一问三不知。也明白了知其一而知其三。如果有基础那么学习起来其实并不是很困难。但是它的文档并不如Vue的全面,且对于某些方面来说。花了一天时间整理一些基本的学习东西

如果觉得对你有帮助,不妨点个赞哦。

- - QAQ

参考资料

React文档

react生命周期个人理解

react模板

React路由

Redux

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

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

相关文章

python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子

今天为大家带来的内容是&#xff1a;详细代码讲解&#xff1a;如何用 Python让自己变成天选之子话不多说直接上代码&#xff1a;请大家猜一猜下面这段代码的运行效果&#xff1a;你是不是以为这段代码运行以后&#xff0c;结果如下图所示&#xff1f;但实际上&#xff0c;我可以…

安卓图标_干货 | 安卓界面系统规范

众所周知&#xff0c;安卓系统是开源的&#xff0c;国内又有超多的手机厂商&#xff0c;小米、魅族、华为、oppo、三星等&#xff0c;每一个品牌有属于自己的UI设计规范&#xff0c;但是我们主要分析UI界面尺寸规范。1、字体安卓系统中文采用的是思源黑体&#xff0c;英文字体为…

pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)

labelImg是图片标注软件&#xff0c;用于数据集的制作、标注等等。下面介绍labelImg的安装过程。我用的是anaconda&#xff0c;所以以anaconda prompt作为终端&#xff1a;在Anaconda Prompt中依次运行以下命令&#xff08;注意大小写&#xff09;&#xff1a;pip install PyQt…

delphi listview 添加数据 慢_ListView 的缓存机制

一.前言ListView 作为一个 Android 5.x 之前的一个用于显示数据列表的控件&#xff0c;或许在今天都已经被 RecyclerView 完全替代&#xff0c;但是其中的缓存机制仍然值得我们去了解&#xff0c;对后面学习 RecyclerView 的缓存机制有很大的帮助。下面将根据 ListView 的三个过…

c++ 显示三维散点图_【无机纳米材料科研制图——OriginLab 0210】Origin多组柱状图3D柱状图及3D散点图...

此篇&#xff0c;我们来分享Origin绘制多组柱状图、立体柱状图和三维散点图。一、多组柱状图1&#xff09;准备数据。准备数据&#xff0c;并点击Plot——》Column/Bar/Pie——》Column进行绘制。结果如下。2&#xff09;带有误差棒的绘图。如果想绘制带有误差棒的直方图&#…

保存文件_wps文件保存在哪里

我们经常使用WPS进行文本、表格的编辑&#xff0c;有时候顺手点击保存之后&#xff0c;文件就会根据默认文件路径保存&#xff0c;如果您不知道默认的文件保存路径&#xff0c;怎么才能够找到刚刚保存的文件&#xff0c;下面就为大家介绍一下wps文件保存在哪里&#xff0c;希望…

mobi格式电子书_进阶能力 | 了解常见的电子书格式

静读君是初中开始接触电子书的&#xff0c;那个时候以为电子书就是TXT&#xff0c;到后来渐渐地接触到了PDF、DOC、CAJ 才知道原来电子书还分这么多的格式&#xff0c;那个时候还在想&#xff0c;为什么要弄这么多不同的格式呢&#xff1f;那不是自找麻烦吗&#xff1f;接触的…

c++ udp通信_Web 通信协议,你还需要知道:SPDY 和 QUIC

一、开拓者&#xff1a;SPDY1. 简介&#xff1a;spdy 是由google推行的&#xff0c;改进版本的HTTP1.1 (那时候还没有HTTP2)。它基于TCP协议&#xff0c;在HTTP的基础上&#xff0c;结合HTTP1.X的多个痛点进行改进和升级的产物。它的出现使web的加载速度有极大的提高。HTTP2也借…

查看 rabbitmq 启动websocket 提示404_RabbitMQ 部署记录

erlang与rabbitmq版本对应关系&#xff1a;https://www.rabbitmq.com/which-erlang.html安装erlang下载地址&#xff1a;http://www.erlang.org/downloads11.安装依赖 2yum install -y gcc gcc-c ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term…

linux远程windows执行cmd,Linux服务器远程连接window服务器并执行cmd命令

前段时间&#xff0c;要给一个分布式调度系统写一个运维脚本&#xff0c;这个分布式调度系统部分子系统部署在window服务器上&#xff0c;这个时候就要想办法用Linux远程来连接window服务器&#xff0c;并执行cmd命令。下面是我的解决方法&#xff1a;1、在Linux服务器上的处理…

Linux安装Flash脚本,Linux(CentOS)下的Shockwave Flash shell一键更新脚本

原创内容,转载请注明出处: https://www.myzhenai.com.cn/post/2318.html https://www.myzhenai.com/thread-17933-1-1.html关键字: Shockwave Flash一键更新脚本 Flash一键更新脚本这个脚本其实是我自己用的, 我的系统里安装了FlashPlayer软件和火狐(firefox)浏览器里安装了Sho…

收文处理和发文处理的环节_集气罩的设计是气体净化、废气处理系统设计的重要环节...

在工业生产中&#xff0c;常用于控制各种颗粒物和气态污染物的方法是将有害物质在发生源收集起来&#xff0c;经过净化设备净化后排到大气中&#xff0c;这就是局部排气净化系统&#xff0c;这种系统所需要的风量最小&#xff0c;效果好&#xff0c;能耗也少&#xff0c;是生产…

linux磁盘管理不用LVM,[linux] LVM磁盘管理(针对xfs和ext4不同文件系统)

简单来说就是&#xff1a;PV&#xff1a;是物理的磁盘分区VG&#xff1a;LVM中的物理的磁盘分区&#xff0c;也就是PV&#xff0c;必须加入VG&#xff0c;可以将VG理解为一个仓库或者是几个大的硬盘LV&#xff1a;也就是从VG中划分的逻辑分区如下图所示PV、VG、LV三者关系&…

cad监控图标_干货!多种不同环境的无线视频监控系统拓扑图

有人问&#xff0c;既然无线视频监控系统如此普及&#xff0c;是不是所有地方都能用到无线视频监控设备呢&#xff1f;例如在大街上、学校里&#xff0c;工厂中、写字楼内&#xff0c;建筑工地上、公园中、住宅小区里、江河岸边、港口码头、甚至是森林、戈壁滩等等。只要有需要…

axios 获取上传进度_PHP获取HTTP body内容的方法总结

有时候我们获取数据时需要根据Header中的格式来解析&#xff0c;比如上传一个json而不是一个文本。这里用到了 php输入|输出流 的概念。PHP 提供了一些杂项输入/输出(IO)流&#xff0c;允许访问 PHP 的输入输出流、标准输入输出和错误描述符&#xff0c; 内存中、磁盘备份的临时…

python搭建selenium_自动化测试之路3-selenium3+python3环境搭建

1、首先安装火狐浏览器 有单独文章分享怎么安装 2、搭建python环境 安装python&#xff0c;安装的时候把path选好&#xff0c;就不用自己在配置&#xff0c;安装方法有单独文档分享 安装好以后cmd打开输入python查看是否配置好 3、安装pip 一般python会默认带一个&#xff0c;放…

keras实现简单lstm_深度学习(LSTM)在交通建模中的应用

上方点击蓝字关注?在简单了解了LSTM原理之后&#xff0c;本期我将以航班延误预测为例为大家介绍一下如何利用Python编程来构建LSTM模型。这里我们要用到一个高级的深度学习链接库——Keras,它以TensorFlow或者Theano作为后端引擎&#xff0c;只处理模型的建立、训练和预测等功…

commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)

前言最近FastJson更新了黑名单,升级到了1.2.61版本,我尝试bypass其黑名单,在AutType打开的情况下成功绕过了黑名单防护.(目前暂未修复,官方即将更新)复现环境准备1.JDK 8U202.所需jar清单如下fastjson-1.2.61.jarcommons-configuration2-2.0.jarcommons-lang3-3.3.2.jarcommons…

王思聪吃热狗的c语言小程序,王思聪吃热狗火了,开发各种恶搞小程序!王校长:我不要面子的啊...

原标题&#xff1a;王思聪吃热狗火了&#xff0c;开发各种恶搞小程序&#xff01;王校长&#xff1a;我不要面子的啊近日王校长上了不少次热搜&#xff0c;其中有一条就是王校长吃热狗火了&#xff0c;接下来就出现了各种各样的表情包&#xff0c;手机壳&#xff0c;素描等等。…

酷狗音乐linux版_让父母也爱上音乐 酷狗音乐大字版成中老年人新宠

当智能手机成为人们日常生活中必不可少的一部分&#xff0c;手机早已从单纯的通话设备变成了功能强大的“百宝箱”&#xff0c;听音乐、看视频、拍照上网早已不是什么新鲜事。然而在我们玩手机玩的不亦乐乎时&#xff0c;你有没有关注过爸妈对使用智能手机的接受度&#xff1f;…