react笔记_07组件实例化对象的三大属性

news2025/2/2 23:53:21

目录

      • 前提
      • 状态(state)
        • 作用
        • 状态使用
          • 总结
      • 属性(props)
        • 展开运算符复习
        • props-作为属性传入数据
        • props-使用展开运算符展开对象
        • props-进行数据类型限制
          • propTypes
            • 语法
            • 校验规则
            • 举例说明
          • defaultProps
            • 语法
            • 举例说明
      • refs
        • 字符串形式的ref
          • 语法
          • 举例说明
          • 注意点
        • 回调形式的ref
          • 什么叫做回调?
          • 语法
          • 举例说明
          • bug
          • 总结
        • createRef形式的ref
          • 语法
          • 举例说明

前提

函数式组件适用于简单组件,类式组件适用于复杂组件;
什么是简单组件?什么是复杂组件?
若是组件是有状态的则被称为复杂组件
若是组件没有状态的被称为简单组件;
为什么这么说呢?
因为react的三大属性是组件实例对象的三大属性,
函数式组件是没有实例的,因此基本不使用这三大属性(后面在hooks中使用);
类式组件存在实例,这三大属性主要是基于class组件来说的

状态(state)

作用

用于存储数据,状态(数据)驱动试图

状态使用

案例:默认显示文本 今天天气炎热,当点击文本时显示 今天天气凉爽
实现

<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
   class Mycomponent extends React.Component{
     // 初始化state数据(若是显示定义了构造器则建议在构造器中初始化状态)
     state = {isHot:false}
     render(){
       const {isHot} = this.state
       return <h1 onClick={this.test}>今天天气{isHot ? '炎热' : '凉爽'}</h1>
     }
    
     test=()=>{
       console.log(this) // 发现在实例化对象的原型对象的原型对象上会发现有一个setState方法(是React.Component上定义的方法)
       // 获取状态中的数据
       const {isHot} = this.state
       //  通过内置API setState去修改state中的数据
       this.setState({isHot:!isHot})
     }
   }
   ReactDOM.render(<Mycomponent />, document.getElementById('test'))
 </script>
总结
  • 为什么状态的名字叫做state?
    • 因此React中存在内置setState方法去修改state中的数据,并且使用此方法修改setState中的数据之后会驱动试图进行更新;
  • 使用setState去修改数据是替换还是合并?
    • 使用内置API setState去修改state中的数据,这个数据的修改不是替换而是合并
    • 举例说明
      • 在初始化时数据state = {isHot:false, xxx:111} 有两条数据
      • 当通过this.setState({isHot:true})去修改数据
      • 再次获取数据时 {isHot:true, xxx:111} xxx不会被覆盖
  • 更改数据的渲染机制是怎样的?
    • 在渲染过程中-初始化
      • 【1】发现该标签Mycomponent为大写标签->去寻找组件
      • 【2】发现组件是类式组件-> 通过 new关键字 调用构造函数生成实例化对象
      • 通过new关键字调用构造函数时会自动调用constructor方法—生成一个实例化对象就调用一次(new一次调用一次)
      • 【3】通过实例化对象调用render函数得到虚拟dom并渲染为真实dom
    • 在渲染过程中-更新
      • 每一次通过 setState 更新数据时 ,都会再次调用render函数—执行n+1次;
      • 若是直接通过点语法去修改state中的数据,虽然数据改变但是不会重新渲染页面(不会调用render方法)

属性(props)

展开运算符复习

<script>
  let arr1 = [1, 3, 5, 7, 9]
  let arr2 = [2, 4, 6, 8, 10]
  // 【1】展开一个数组
  console.log(...arr1); 
  // 【2】合并数组
  let arr3 = [...arr1, ...arr2]

  // 【3】在函数接收参数使用中使用
  function sum(...numbers) {
    return numbers.reduce((preValue, currentValue) => {
      return preValue + currentValue
    })
  }
  console.log(sum(1, 2, 3, 4));

  // 【4】构造字面量对象时使用展开语法
  let person = {name: 'tom', age: 18}
  let person2 = {...person}

  // 【5】合并修改
  let person3 = {...person, name: 'jack', address: "地球"}
  console.log(person3)// {address: "地球", age: 18, name: "jack"}

  // 注意:展开运算符不能展开对象
  //console.log(...person); //报错,
</script>

总结:
展开运算符可以用来展开数组、合并数组、构造字面量对象时使用展开语法、合并修改,但是却不可以展开对象
在很多时候需要将数据传入组件中,应该怎么传递呢?

props-作为属性传入数据

  • 类式组件
    • 通过标签以 属性 的形式将数据传入,会统一在该实例化对象的props属性中进行接收。
       <div id="test"></div>
       <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
       <script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
       <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
       <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
       <!-- 类式组件 -->
       <!-- [1]以属性的形式传递数据 实例:传入姓名、性别、年龄并在页面上进行显示-->
       <script type="text/babel">
         class Mycomponent extends React.Component{
           render(){
             console.log(this.props)
             const {name, age ,sex} = this.props
             return (
               <ul>
                 <li>姓名:{name}</li>
                 <li>年龄:{age}</li>
                 <li>性别:{sex}</li>
               </ul>
             )
           }
         }
         ReactDOM.render(<Mycomponent name='chaochao' sex='女' age='12' />, document.getElementById('test'))
       </script>
      
  • 函数式组件
    • 通过标签以 属性 的形式将数据传入,会统一在方法以形参的形式进行接收(参数为一个对象–全部参数以键值对的形式存储)
      <div id="test"></div>
      <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
      <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
      <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
       <script type="text/babel">
        function Mycomponent (props){
          const {name, age , sex} = props
          return (
            <ul>
              <li>姓名:{name}</li>
              <li>年龄:{age}</li>
              <li>性别:{sex}</li>
            </ul>
          )
        }
        // 函数中没有静态属性,因此将限制写在函数外面
        Mycomponent.protoTypes={
          name: PropTypes.string.isRequired,
          sex: PropTypes.string,
          age: PropTypes.array
        }
        Mycomponent.defaultProps={
          sex:'待定',
          age:0
        }
        const obj ={
          name:'chaochao',
          // sex:'女',
          age:18
        }
        ReactDOM.render(<Mycomponent {...obj} />, document.getElementById('test')) 
      </script>
      
  • 注意:props中的数据是 只读 属性,只允许使用不允许修改

props-使用展开运算符展开对象

在很多情况下,我们传递的数据可能是一个对象或者是属性很多,一一传递显然不是很现实,在这里可以使用展开运算符进行数据传递

<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<!-- [2]使用展开运算符进行数据传递 实例:传入姓名、性别、年龄并在页面上进行显示-->
<script type="text/babel">
  class Mycomponent extends React.Component{
    render(){
      console.log(this.props)
      const {name, age ,sex} = this.props
      return (
        <ul>
          <li>姓名:{name}</li>
          <li>年龄:{age}</li>
          <li>性别:{sex}</li>
        </ul>
      )
    }
  }
  const obj ={
    name:'chaochao',
    sex:'女',
    age:18
  }
  ReactDOM.render(<Mycomponent {...obj} />, document.getElementById('test')) // {}表示要在jsx中混入js语法了并不是对象
</script>

通过上述代码 发现页面数据依旧能正常显示,但是 展开运算符不是不能够展开对象吗?
—>是因为引入的React核心语法以及babel的作用下 可以在标签间使用展开运算符展开对象(仅能在标签间使用

props-进行数据类型限制

propTypes

构造函数存在propTypes属性,作用是进行数据类型校验;

语法
propTypes = {
属性名: 校验规则
}
校验规则

校验规则使用的是PropTypes对象 -> PropTypes 提供一系列验证器,可用于确保组件接收到的数据类型是有效的,出于性能方面的考虑,propTypes 仅在开发模式下进行检查。
在这里插入图片描述
因此在15.5版本之后 再使用PropTypes就需要先安装 prop-types 包;
这里是一个示例记录提供的不同的验证器:

import PropTypes from 'prop-types';

MyComponent.propTypes = {
  // 你可以声明一个 prop 是一个特定的 JS 原始类型。 
  optionalArray: PropTypes.array, // 数组
  optionalBool: PropTypes.bool, // boolean值
  optionalFunc: PropTypes.func, // 函数
  optionalNumber: PropTypes.number, // 数字
  optionalObject: PropTypes.object, // 对象
  optionalString: PropTypes.string, // 字符串
  optionalSymbol: PropTypes.symbol, // symbol
  optionalElement: PropTypes.element,// React 元素。

  // 你也可以声明一个 prop 是类的一个实例。 
  optionalMessage: PropTypes.instanceOf(Message),

  // 你可以声明 prop 是特定的值,类似于枚举
  optionalEnum: PropTypes.oneOf(['News', 'Photos']),

  // 一个对象可以是多种类型其中之一
  optionalUnion: PropTypes.oneOfType([
    PropTypes.string,
    PropTypes.number,
    PropTypes.instanceOf(Message)
  ]),

  // 你可以使用 `isRequired' 链接上述任何一个,以确保在没有提供 prop 的情况下显示警告。
  // 函数类型的值且必填
  requiredFunc: PropTypes.func.isRequired,
  // 任何数据类型的值但必填
  requiredAny: PropTypes.any.isRequired,

  // 你也可以声明自定义的验证器。如果验证失败返回 Error 对象。不要使用 `console.warn` 或者 throw ,
  // 因为这不会在 `oneOfType` 类型的验证器中起作用。
  customProp: function(props, propName, componentName) {
    if (!/matchme/.test(props[propName])) {
      return new Error(
        'Invalid prop `' + propName + '` supplied to' +
        ' `' + componentName + '`. Validation failed.'
      );
    }
  },

  // 也可以声明`arrayOf`和`objectOf`类型的验证器,如果验证失败需要返回Error对象。
  // 会在数组或者对象的每一个元素上调用验证器。验证器的前两个参数分别是数组或者对象本身,
  // 以及当前元素的键值。
  customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
    if (!/matchme/.test(propValue[key])) {
      return new Error(
        'Invalid prop `' + propFullName + '` supplied to' +
        ' `' + componentName + '`. Validation failed.'
      );
    }
  })
};
举例说明
    <div id="test"></div>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <!-- 【3】对传入的数据进行类型限制(数据类型、是否必传、设置默认值) 实例:传入姓名、性别、年龄并在页面上进行显示-->
    <script type="text/babel">
        class Mycomponent extends React.Component{
          static propTypes={
            name: PropTypes.string.isRequired,
            sex: PropTypes.string,
            age: PropTypes.number
          }
          render(){
            const {name, age ,sex} = this.props
            return (
              <ul>
                <li>姓名:{name}</li>
                <li>年龄:{age}</li>
                <li>性别:{sex}</li>
              </ul>
            )
          }
        }
        const obj ={
          name:'chaochao',
          sex:'女',
          age:'18'
        }
        ReactDOM.render(<Mycomponent {...obj} />, document.getElementById('test')) 
    </script>
  • 报错
  • 在这里插入图片描述
defaultProps

构造函数存在defaultProps属性,作用是设置数据的默认值

语法
defaultProps={
  属性名:'默认值'
}
举例说明
<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<!--3】对传入的数据进行类型限制(数据类型、是否必传、设置默认值) 实例:传入姓名、性别、年龄并在页面上进行显示-->
<script type="text/babel">
    class Mycomponent extends React.Component{
      static defaultProps={
        sex:'待定',
        age:0
      }
      render(){
        const {name, age ,sex} = this.props
        return (
          <ul>
            <li>姓名:{name}</li>
            <li>年龄:{age}</li>
            <li>性别:{sex}</li>
          </ul>
        )
      }
    }
    const obj ={
      name:'chaochao',
      age:18
    }
    ReactDOM.render(<Mycomponent {...obj} />, document.getElementById('test')) 
</script>
  • 性别显示待定
  • 在这里插入图片描述

refs

在react中尽量不要直接操作dom,如果要操作dom,可以使用refs;
定义ref的形式有3种

字符串形式的ref

语法

每个实例化对象上都存在一个refs属性,该属性为一个对象;
在想要获取的vdom上添加ref属性,属性值为一个字符串;
添加之后就会将该dom元素以键值对的形式(ref属性名:dom元素)添加在refs对象中;

举例说明
<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  class Mycomponent extends React.Component{
    state = {isHot:false}
    render(){
      const {isHot} = this.state
      return (
         <div>
           <input ref='input1' type="text" />
           <button onClick={this.getValue}>点我显示数据</button>
         </div>
      )
    }
    getValue = ()=>{
      console.log('refs', this.refs) // refs {input1: input}
      const {input1} = this.refs
      console.log(input1.value) // 输入111点击按钮->111
    }
   }
   ReactDOM.render(<Mycomponent />, document.getElementById('test'))
</script>
注意点

该形式在官方不推荐使用,因为使用此方式定义ref若是多次定义—效率有很大的问题

回调形式的ref

什么叫做回调?

1.定义了函数;
2.函数自己没调用;
3.函数最终被执行了

语法

在想要获取的vdom上添加ref属性, 属性值为一个函数

在render函数执行过程中,发现ref的属性值为一个函数,react就会调用该函数并将该dom作为参数传入到函数中,我们就可以拿到该dom了。

 ref={dom => value=dom}
  • 将dom元素赋值给了实例化对象的value属性
举例说明
<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  class Mycomponent extends React.Component{
    state = {isHot:false}
    render(){
      const {isHot} = this.state
      return (
         <div>
           <input ref={c => this.input=c} type="text" />
           <button onClick={this.getValue}>点我显示数据</button>
         </div>
      )
    }
    getValue = ()=>{
       const {input} = this
       console.log(input.value) // 输入111点击按钮-> 111
    }
   }
  ReactDOM.render(<Mycomponent />, document.getElementById('test'))
</script>
bug

问题

当将函数写在行内时

  • 渲染-> 执行render函数时-> 发现ref绑定的是一个函数,会自动调用该函数并将该dom元素作为参数传入;
  • 更新 ->重新调用render函数,此次执行过程中会调用2次该函数—第一次传入的参数为null,第二次传入的才是dom
    • 没有造成实质的影响,因为这两次调用过程很短暂;

解决
不直接将函数写在行内,将函数写在实例对象上之后引入就不会有这样的问题;

  • 渲染-> 执行render函数时-> 发现ref绑定的是一个函数,会自动调用该函数并将该dom元素作为参数传入;
  • 更新 -> 不调用此函数;

验证

<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  class Mycomponent extends React.Component{
    state = {isHot:false}
    render(){
      return (
         <div>
           <input ref={c => {console.log('c',c); this.input=c}} type="text" />
           <button onClick={this.getValue}>点我显示数据</button>
           <button onClick={this.editValue}>点我更改state</button>
         </div>
      )
    }
    getValue = ()=>{
      const {input} = this
      console.log(input.value) // 输入111点击按钮-> 111
    }
    editValue = ()=>{
      const {isHot} = this.state
      this.setState({isHot: !isHot})
    }
   }
  ReactDOM.render(<Mycomponent />, document.getElementById('test'))
</script>
  • 一进入页面,控制台打印
    • 在这里插入图片描述
  • 当点击“点我更改state”,控制台打印
    • 在这里插入图片描述
<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  class Mycomponent extends React.Component{
    state = {isHot:false}
    render(){
      return (
         <div>
            <input ref={this.reffun} type="text" />
           <button onClick={this.getValue}>点我显示数据</button>
           <button onClick={this.editValue}>点我更改state</button>
         </div>
      )
    }
    reffun = (dom)=>{
      console.log('c',dom); 
      this.input=dom
    }
    getValue = ()=>{
      const {input} = this
      console.log(input.value) // 输入111点击按钮-> 111
    }
    editValue = ()=>{
      const {isHot} = this.state
      this.setState({isHot: !isHot})
    }
   }
  ReactDOM.render(<Mycomponent />, document.getElementById('test'))
</script>
  • 一进入页面,控制台打印
    • 在这里插入图片描述
  • 当点击“点我更改state”,控制台无显示
总结

将函数写在行内—初始渲染该函数执行1次,每次更新执行两次;
不将函数写在行内—只会在初始化时执行1次;

createRef形式的ref

语法

React对象上存在一个createRef方法,该方法调用后可以返回一个容器,该容器可以存储被ref所标识的节点,该容器是“专人专用”的->也就是说使用该方法产生的容器只能装一个dom;

this.input = React.createRef() // 产生一个容器
<input ref={ this.input }> //  存储

const {current} = this.input // 容器的current属性表示当前的dom元素
举例说明
<div id="test"></div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  class Mycomponent extends React.Component{
    state = {isHot:false}
    input1 = React.createRef()
    render(){
      const {isHot} = this.state
      return (
         <div>
           <input ref={this.input1} type="text" />
           <button onClick={this.getValue}>点我显示数据</button>
         </div>
      )
    }
    getValue = ()=>{
       const {current} = this.input1
       console.log(current.value) //输入111点击按钮->111
    }
   }
  ReactDOM.render(<Mycomponent />, document.getElementById('test'))
</script>

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

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

相关文章

RT-Thread 简介

1.RT-Thread 概述 RT-Thread&#xff0c;全称是Real Time-Thread&#xff0c;顾名思义&#xff0c;它是一个嵌入式实时多线程操作系统&#xff0c; 基本属性之一是支持多任务&#xff0c;允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。 事实上&#xff…

Redis实战——签到统计(BitMap的用法)

1. 什么是BitMap 我们针对签到功能完全可以通过mysql来完成&#xff0c;比如说以下这张表 但是&#xff0c;用户一次签到&#xff0c;就是一条记录&#xff0c;假如有1000万用户&#xff0c;平均每人每年签到次数为10次&#xff0c;则这张表一年的数据量为 1亿条。 每签到一次…

js实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小)

系列文章目录 文章目录系列文章目录背景与效果图1.背景如下&#xff08;功能图&#xff09;&#xff1a;2.效果图如下&#xff1a;拖拽后的效果缩放的效果放大的效果一、功能&#xff1a;支持鼠标长按拖拽1.鼠标事件&#xff1a;2.拖拽功能流程3.拖拽部分代码如下二、功能&…

HTTP报文详解

个人博客地址&#xff1a; http://xiaohe-blog.top/ 文章目录1. 请求1.1 请求行1.2 请求头1.3 空白行1.4 请求体2. 响应2.1 状态行2.2 响应头2.3 空白行2.4 响应体2.5 HTTP报文总结3. HTTP方法4. GET与POST的区别5. 状态码1. 请求 1.1 请求行 请求方式 请求地址 请求协议版本号…

指针进阶1 2

字符指针 int main() {char ch q;char* pa &ch;return 0; }不仅可以这样写还可以指向一个字符串 int main() {/*char ch q;char* pa &ch;*/char* ph "hello world";printf("%c\n", *ph);//打印遇到\0才会结束&#xff0c;没数据会打印随机值…

pybind11学习 | VS2022下安装配置

pybind11是一个只有头文件&#xff08;header-only&#xff09;的轻量级库&#xff0c;其主要目的是建立C的Python代码绑定&#xff0c;实现C和Python无缝连接。我学习这个工具的目的&#xff0c;是为了能够在Python中调用C代码实现一些计算密集型任务&#xff0c;同时培养自己…

Java后端核心技能知识点

今天带来的是2022全新升级的《Java岗面试核心版》&#xff0c;这个版本里面不仅仅包含了面试题&#xff0c;还有更多的技术难点、大厂算法、实战项目、简历模板等等&#xff0c;全册接近1700页&#xff01;相比上一个版本的287页&#xff0c;升级了多少内容你懂的 大概内容&am…

南京邮电大学编译原理实验二(语法分析程序)

文章目录一、文法二、源代码模块&#xff08;一&#xff09;消除文法的左递归&#xff08;二&#xff09;求First集&#xff08;三&#xff09;求Follow集&#xff08;四&#xff09;构建LL(1)分析表&#xff08;五&#xff09;符号串分析&#xff08;六&#xff09;主函数三、…

破解色带现象(下)

编者按&#xff1a;本文是“破解色带现象”文章的第二部分&#xff0c;Fabio Sonnati进一步 分析了色带现象产生的原因&#xff0c;并提供了新的检测办法。本文已获得作者授权转载。翻译&#xff1a;Argus原文链接&#xff1a;https://sonnati.wordpress.com/2022/09/16/defea…

Flink实战案例四部曲

Flink实战案例四部曲 第一部曲:统计5分钟内用户修改创建删除文件的操作日志数量 输入 1001,delete 1002,update 1001,create 1002,delte 输出 1001&#xff0c;2 1002&#xff0c;2代码如下。 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironmen…

Anlios装grouplist 组件之后报错,安装tiger-vncserver

因为之前升级了一个epel-release源&#xff0c;然后containerd也装进去了&#xff0c;但是版本太低 然后以为是runc挡住了&#xff0c;发现没有runc 删完了containerd就可以装了 rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm dnf install wntp…

【性能篇】30 # 怎么给WebGL绘制加速?

说明 【跟月影学可视化】学习笔记。 常规绘图方式的性能瓶颈 例子&#xff1a;在一个画布上渲染 3000 个不同颜色的、位置随机的三角形&#xff0c;并且让每个三角形的旋转角度也随机。 <!DOCTYPE html> <html lang"en"><head><meta charse…

SpringBoot+Vue实现前后端分离的高校思政课实践教学管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

基于SSM的大学生心理健康系统设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系信息、文章信息、咨询师信息、服务信息、测试信喜 管理员功能&#xff1a; 1、管理…

继续谈谈从Rxjava迁移到Flow的背压策略

前言 对于背压问题不久前就讨论过了&#xff0c;这里就不过多介绍了&#xff0c;总之它是一个非常复杂的话题&#xff0c;本文的主要目的是分析我们如何从Rxjava迁移到Flow并且使用其背压方案&#xff0c;由于本身技术的限制以及协程内部的复杂性&#xff0c;不会做过多的深入…

下载安装PyTorch

1、下载并安装Visual Studio Code选择合适版本安装 2、下载安装conda并配置环境 下载方式一&#xff1a;官网下载 下载方式二&#xff1a;清华镜像安装 3、conda配置环境 打开电脑高级系统配置点开系统环境变量&#xff1a; 找到path然后点击Edit或者直接双击&#xff1a; 之后…

利用LSTM识别篇章关系实战代码+数据

1.显式篇章关系分类概述 案例知识点: 任务描述:篇章关系分析是自然语言中处理篇章级基础语言分析任务,其目的是利用规则或机器学习等计算机处理手段判别篇章各组成成分之间的修辞逻辑关系,从而从整体上理解篇章。其中论元之间有连接词连接的此类关系称为显式篇章关系。本教…

实验七、MOS管分压式偏置共源放大电路的静态和动态参数

一、题目 搭建MOS管分压式偏置共源放大电路。利用Multisim研究下列问题&#xff1a; &#xff08;1&#xff09;确定一组电路参数&#xff0c;使电路的 QQQ 点合适。 &#xff08;2&#xff09;若输出电压波形底部失真&#xff0c;则可采取哪些措施&#xff1f;若输出电压波形…

Mysql概念知识

Mysql数据库基础知识为什么要使用数据库数据保存在内存数据保存在文件数据保存在数据库什么是SQL&#xff1f;什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有几种录入格式&#xff1f;分别有什么区别&#xff1f;数据类型mysql有哪些数据类型引…

计算机毕设Python+Vue学生资源管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…