React技术

React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路 React 生态系统包含了丰富的工具和库,帮助开发者### 总结(续)React 生态系统包含了丰富的工具和库,帮助开发者高效地构建现代 Web 应用。从状态管理、表单处理、国际化,到动画、测试、构建工具,React 社区提供了多种解决方案,满足不同场景下的需求。提升开发效率:使用高效的状态管理和表单处理库,如 Redux 和 Formik。增强用户体验:通过动画库如 Framer Motion 和 Recharts 展示丰富的交互和数据可视化。提高代码质量。 阅读详情

简介

React是Facebook开发并开源的前端框架
当时他们的团队在市面上没有找到合适的MVC框架,就自己写了一个Js框架,用来架设Instagram(图片分享社交网络)。2013年React开源

React解决的是前端MVC框架中的View视图层的问题

Virtual DOM

DOM(文档对象模型Document Object Model)
在这里插入图片描述
在这里插入图片描述

  • 将网页内所有内容映射到一棵树型结构的层级对象模型上,浏览器提供对DOM的支持,用户可以是用脚本调用DOM API来动态的修改DOM结点,从而达到修改网页的目的,这种修改是浏览器中完成,浏览器会根据DOM的改变重绘改变的DOM结点部分

  • 修改DOM重新渲染代价太高,前端框架为了提高效率,尽量减少DOM的重绘,提出了Virtual DOM。Virtual DOM是一个JavaScript对象,性能更高。所有的修改都是先生成一个新的Virtual DOM,通过比较算法比较新旧Virtual DOM,得到差异化VirtualDOM,将这部分差异更新到浏览器DOM,浏览器只需要渲染这部分变化就行了

  • React实现了DOM Diff算法可以高效比对Virtual DOM

支持JSX语法

JSX是一种JavaScript和XML混写的语法,是JavaScript的扩展

React.render(
	<div> 
		<div> 
			<div>content</div> 
		</div> 
	</div>, 
	document.getElementById('example')
);

测试程序

替换 /src/index.js 为下面的代码

import React from 'react';
import ReactDom from 'react-dom';

class Root extends React.Component { 
	render() {
		return <div>Hello World</div>;
	}
}

ReactDom.render(<Root/>, document.getElementById('root'));

保存文件后,会自动编译,并重新装载刷新浏览器端页面
在这里插入图片描述
在这里插入图片描述

程序解释

import React from 'react'; 导入react模块
import ReactDOM from 'react-dom'; 导入react的DOM模块

class Root extends React.Component 组件类定义,从React.Component类上继承。这个类生成JSXElement对象即React元素
render() 渲染函数。返回组件中渲染的内容。注意,只能返回唯一 一个顶级元素回去

ReactDom.render(<Root/>, document.getElementById('root')); 第一个参数是JSXElement对象,第二个是DOM的Element元素。将React元素添加到DOM的Element元素中并渲染

还可以使用React.createElement创建react元素,第一参数是React组件或者一个HTML的标签名称(例如div、span)

  • 改写后代码为
import React from 'react';
import ReactDom from 'react-dom';
class Root extends React.Component {
  render() {
    //return <div>Hello World</div>;
    return React.createElement('div', null, 'Hello World');
  }
}
//ReactDom.render(<Root/>, document.getElementById('root'));
ReactDom.render(React.createElement(Root), document.getElementById('root'));

很明显JSX更简洁易懂,推荐使用JSX语法

  • 增加一个子元素
import React from 'react';
import ReactDom from 'react-dom';

class SubEle extends React.Component {
  render() {
    return <div>Sub content</div>;
  }
}

class Root extends React.Component {
  render() {
    return (
      <div>
      <h2>Hello World</h2>
      <br />
      <SubEle />
    </div >);
  }
}

ReactDom.render(<Root />, document.getElementById('root'));

在这里插入图片描述
注意:

  • React组件的render函数return,只能是一个顶级元素
  • JSX语法是XML,要求所有元素必须闭合,注意 <br /> 不能写成 <br>

JSX规范

  • 约定标签中首字母小写就是html标记,首字母大写就是组件
  • 要求严格的HTML标记,要求所有标签都必须闭合
  • br也应该写成 <br /> ,/前留一个空格
  • 单行省略小括号,多行请使用小括号
  • 元素有嵌套,建议多行,注意缩进
  • JSX表达式:表达式使用{}括起来,如果大括号内使用了引号,会当做字符串处理,例如 <div>{'2>1?true:false'}</div> 里面的表达式成了字符串

组件状态state

每一个React组件都有一个状态属性state,它是一个JavaScript对象,可以为它定义属性来保存值
如果状态变化了,会触发UI的重新渲染。使用setState()方法可以修改state值
注意:state是每个组件自己内部使用的,是组件自己的属性

依然修改/src/index.js

import React from 'react';
import ReactDom from 'react-dom';

class Root extends React.Component {
  // 定义一个对象
  state = { p1: 'www.python', p2: '.org' }; // 构造函数中定义state
  render() {
    // this.state.p1 = 'python.com'; // 可以修改属性值
    // this.setState({p1:'python.com'}); // 不可以对还在更新中的state使用setState
    // Warning: setState(...): Cannot update during an existing state transition (such as within render).
    setTimeout(() => this.setState({ p1: 'python' }), 5000);
    return (
      <div>
        <div>Welcome to {this.state.p1}{this.state.p2}</div>
        <br />
      </div>);
  }
}

ReactDom.render(<Root />, document.getElementById('root'));

在这里插入图片描述

  • 如果将 ·this.state.p1 = ‘www.python’· 改为 ·this.setState({p1:‘python.com’});· 就会出警告
  • 可以使用延时函数 setTimeout(() => this.setState({ p1: 'python.com' }), 5000); 即可

复杂的状态例子

先看一个网页

<html>
<head>
    <script type="text/javascript">
        function getEventTrigger(event) {
            x = event.target; // 从事件中获取元素
            alert("触发的元素的id是:" + x.id);
        }
    </script>
</head>
<body>
    <div id="t1" onmousedown="getEventTrigger(event)">
        点击这句话,会触发一个事件,并弹出一个警示框
    </div>
</body>
</html>

在这里插入图片描述
div的id是t1,鼠标按下事件捆绑了一个函数,只要鼠标在对象上按下就会触发调用getEventTrigger函数,浏览器会送给它一个参数event。event是事件对象,当事件触发时,event包含触发这个事件的对象

HTML DOM的JavaScript事件

属性此事件发生在何时
onabort图像的加载被中断
onblur元素失去焦点
onchange域的内容被改变
onclick(常用)当用户点击某个对象时调用的事件句柄
ondblclick当用户双击某个对象时调用的事件句柄
onerror在加载文档或图像时发生错误
onfocus元素获得焦点
onkeydown某个键盘按键被按下
onkeypress某个键盘按键被按下并松开
onkeyup某个键盘按键被松开
onload一张页面或一幅图像完成加载
onmousedown鼠标按钮被按下
onmousemove鼠标被移动
onmouseout鼠标从某元素移开
onmouseover鼠标移到某元素之上
onmouseup鼠标按键被松开
onreset重置按钮被点击
onresize窗口或框架被重新调整大小
onselect文本被选中
onsubmit确认按钮被点击
onunload用户退出页面
  • 使用React实现上面的传统的HTML
import React from 'react';
import ReactDom from 'react-dom';
class Toggle extends React.Component {

  state = { flag: true }; // 类中定义state 
  handleClick(event) {
    console.log(event.target.id);
    console.log(event.target === this);
    console.log(this);
    console.log(this.state);
    this.setState({ flag: !this.state.flag });
  }
  
  render() {/* 注意一定要绑定this onClick写成小驼峰 */
    return <div id="t1" onClick={this.handleClick.bind(this)}>
      点击这句话,会触发一个事件。{this.state.flag.toString()}
    </div>;
  }
}
class Root extends React.Component {
  // 定义一个对象
  state = { p1: 'www.python', p2: '.org' }; // 构造函数中定义state 
  render() {
    return (
      <div>
        <div>Welcome to {this.state.p1}{this.state.p2}</div>
        <br />
        <Toggle />
      </div>);
  }
}
ReactDom.render(<Root />, document.getElementById('root'));

在这里插入图片描述
在这里插入图片描述
分析
Toggle类

  • 它有自己的state属性
  • 当render完成后,网页上有一个div标签,div标签对象捆绑了一个click事件的处理函数,div标签内有文本内容
  • 如果通过点击左键,就触发了click方法关联的handleClick函数,在这个函数里将状态值改变
  • 状态值state的改变将引发render重绘
  • 如果组件自己的state变了,只会触发自己的render方法重绘

注意

  • {this.handleClick.bind(this)},不能外加引号
  • this.handleClick.bind(this) 一定要绑定this,否则当触发捆绑的函数时,this是函数执行的上下文决定的,this已经不是触发事件的对象
  • console.log(event.target.id),取回的产生事件的对象的id,但是这不是我们封装的组件对象。所以,console.log(event.target===this)是false。所以这里一定要用this,而这个this是通过绑定来的
  • this写在类中,始终指的是React组件实例本身

React中的事件

  • 使用小驼峰命名
  • 使用JSX表达式,表达式中指定事件处理函数
  • 不能使用return false,如果要阻止事件默认行为,使用event.preventDefault()

属性props

props就是组件的属性properties
把React组件当做标签使用,可以为其增加属性,如下

  • <Toggle name="school" parent={this} />

为上面的Toggle元素增加属性:

  1. name = "school" ,这个属性会作为一个单一的对象传递给组件,加入到组件的props属性中
  2. parent = {this} ,注意这个this是在Root元素中,指的是Root组件本身
  3. 在Root中为使用JSX语法为Toggle增加子元素,这些子元素也会被加入Toggle组件的props.children中
import React from 'react';
import ReactDom from 'react-dom';

class Toggle extends React.Component {
  state = { flag: true }; // 类中定义state 
  handleClick(event) {
    console.log(event.target.id);
    console.log(event.target === this);
    console.log(this);
    console.log(this.state);
    this.setState({ flag: !this.state.flag });
  }
  
  render() {/* 注意一定要绑定this onClick写成小驼峰 */
    return <div id="t1" onClick={this.handleClick.bind(this)}>
      点击这句话,会触发一个事件。{this.state.flag.toString()}<br />
      显示props<br />
      {this.props.name} : {this.props.parent.state.p1}{this.props.parent.state.p2}
      {this.props.children}
    </div>;
  }
}

class Root extends React.Component {
  // 定义一个对象 
  state = { p1: 'www.python', p2: '.org' }; // 构造函数中定义state
  render() {
    return (
      <div>
        <div>Welcome to {this.state.p1}{this.state.p2}</div>
        <br />
        <Toggle name="school" parent={this}>{/*自定义2个属性通过props传给Toggle组件对象*/}
          <hr />{/*子元素通过props.children访问*/}
          <span>我是Toggle元素的子元素</span>{/*子元素通过props.children访问*/}
        </Toggle>
      </div>);
  }
}

ReactDom.render(<Root />, document.getElementById('root'));

在这里插入图片描述

  • 尝试修改props中的属性值,会抛出 TypeError: Cannot assign to read only property 'name' of object '#<Object>'异常
  • 也就是说props在组件内部不能修改,只读

应该说,state是私有private的属于组件自己的属性,组件外无法直接访问。可以修改state,但是建议使用setState方法

props是公有public属性,组件外也可以访问,但组件内只读
props是一种组件外部传入向组件内部传入数据的一种方式,只不过采用标签属性的方式

构造器constructor

使用ES6的构造器,要提供一个参数props,并把这个参数使用super传递给父类

import React from 'react';
import ReactDom from 'react-dom';
class Toggle extends React.Component {
  //state = { flag: true }; // 类中定义state
  constructor(props) {
    super(props); // 一定要调用super父类构造器,否则报错
    this.state = { flag: true }; // 类中定义state
  }
  
  handleClick(event) {
    console.log(event.target.id);
    console.log(event.target === this);
    console.log(this);
    console.log(this.state);
    this.setState({ flag: !this.state.flag });
  }
  
  render() {/* 注意一定要绑定this onClick写成小驼峰 */
    return <div id="t1" onClick={this.handleClick.bind(this)}>
      点击这句话,会触发一个事件。{this.state.flag.toString()}<br />
      显示props<br />
      {this.props.name} : {this.props.parent.state.p1}{this.props.parent.state.p2}
      {this.props.children}
    </div>;
  }
}

class Root extends React.Component {
  // 定义一个对象 
  state = { p1: 'www.python', p2: '.org' }; // 构造函数中定义state 
  
  render() {
    return (
      <div>
        <div>Welcome to {this.state.p1}{this.state.p2}</div>
        <br />
        <Toggle name="school" parent={this}>{/*自定义2个属性通过props传给Toggle组件对象*/}
          <hr />{/*子元素通过props.children访问*/}
          <span>我是Toggle元素的子元素</span>{/*子元素通过props.children访问*/}
        </Toggle>
      </div>);
  }
}
ReactDom.render(<Root />, document.getElementById('root'));

在这里插入图片描述

组件的生命周期

组件的生命周期可分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

组件的生命周期状态,说明在不同时机访问组件,组件正处在生命周期的不同状态上。
在不同的生命周期状态访问,就产生不同的方法。

生命周期的方法如下:

  • 装载组件触发

    • componentWillMount 在渲染前调用,在客户端也在服务端。只会在装载之前调用一次
    • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送A JAX请求等操作(防止异部操作阻塞UI)。只在装载完成后调用一次,在render之后
  • 更新组件触发。这些方法不会在首次render组件的周期调用

    • componentWillReceiveProps(nextProps) 在组件接收到一个新的prop时被调用。这个方法在初始化render时不会被调用
    • shouldComponentUpdate(nextProps,nextState)返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用
      • 可以在你确认不需要更新组件时使用
      • 如果设置为false,就是不允许更新组件,那么componentWillUpdate、componentDidUpdate不会执行
    • componentWillUpdate(nextProps, nextState) 在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用
    • componentDidUpdate(prevProps, prevState) 在组件完成更新后立即调用。在初始化时不会被调用。
  • 卸载组件触发

    • componentWillUnmount在组件从 DOM 中移除的时候立刻被调用
      在这里插入图片描述
      由图可知
  • constructor构造器是最早执行的函数

  • 组件构建好之后,如果更新组件的state或props(注意在组件内props是只读的),就会在render渲染前触发一系列的 更新生命周期函数

因此,重新编写/src/index.js
构造两个组件,在子组件Sub中,加入所有生命周期函数

下面的例子添加是装载、卸载组件的生命周期函数

import React from 'react';
import ReactDom from 'react-dom';

class Sub extends React.Component {
  constructor(props) {
    console.log('Sub constructor')
    super(props); // 调用父类构造器   
    this.state = { count: 0 };
  }
  
  handleClick(event) {
    this.setState({ count: this.state.count + 1 });
  }
  
  render() {
    console.log('Sub render');
    return (<div id="sub" onClick={this.handleClick.bind(this)}>
      Sub's count = {this.state.count}
    </div>);
  }
  
  componentWillMount() {
    // constructor之后,第一次render之前  
    console.log('Sub componentWillMount');
  }
  
  componentDidMount() {
    // 第一次render之后  
    console.log('Sub componentDidMount');
  }
  
  componentWillUnmount() {
    // 清理工作  
    console.log('Sub componentWillUnmount');
  }
}

class Root extends React.Component {
  constructor(props) {
    console.log('Root Constructor')
    super(props); // 调用父类构造器
    // 定义一个对象
    this.state = {};
  }
  
  render() {
    return (
      <div>
        <Sub />
      </div>);
  }
}

ReactDom.render(<Root />, document.getElementById('root'));  

在这里插入图片描述

  • 上面可以看到顺序是
constructor -> componentWillMount -> render -> componentDidMount ----state或props改变----> render
  • 增加 更新组件函数
    为了演示props的改变,为Root元素增加一个click事件处理函数
import React from 'react';
import ReactDom from 'react-dom';

class Sub extends React.Component {
  constructor(props) {
    console.log('Sub constructor')
    super(props); // 调用父类构造器
    this.state = { count: 0 };
  }

  handleClick(event) {
    this.setState({ count: this.state.count + 1 });// 不要用++
  }
  render() {
    console.log('Sub render');
    return (<div style={{
      height: 200 + 'px', color: 'red', backgroundColor: '#f0f0f0',
      padding: '20px'
    }}>
      <a id="sub" onClick={this.handleClick.bind(this)} style={{ backgroundColor: 'white' }}>
        Sub's count = {this.state.count}
      </a>
    </div>);
  }

  componentWillMount() {
    // constructor之后,第一次render之前
    console.log('Sub componentWillMount');
  }

  componentDidMount() {
    // 第一次render之后
    console.log('Sub componentDidMount');
  }

  componentWillUnmount() {
    // 清理工作
    console.log('Sub componentWillUnmount');
  }

  componentWillReceiveProps(nextProps) {
    // props变更时,接到新props了,交给shouldComponentUpdate。
    // props组件内只读,只能从外部改变
    console.log(this.props);
    console.log(nextProps);
    console.log('Sub componentWillReceiveProps', this.state.count);
  }

  shouldComponentUpdate(nextProps, nextState) {
    // 是否组件更新,props或state方式改变时,返回布尔值,true才会更新
    console.log('Sub shouldComponentUpdate', this.state.count, nextState);
    return true; // return false将拦截更新
  }

  componentWillUpdate(nextProps, nextState) {
    // 同意更新后,真正更新前,之后调用render 
    console.log('Sub componentWillUpdate', this.state.count, nextState);
  }

  componentDidUpdate(prevProps, prevState) {
    // 同意更新后,真正更新后,在render之后调用
    console.log('Sub componentDidUpdate', this.state.count, prevState);
  }
}

class Root extends React.Component {
  constructor(props) {
    console.log('Root Constructor')
    super(props); // 调用父类构造器  
    // 定义一个对象 
    this.state = { flag: true, name: 'root' };
  }

  handleClick(event) {
    this.setState({
      flag: !this.state.flag,
      name: this.state.flag ? this.state.name.toLowerCase() : this.state.name.toUpperCase()
    });
  }

  render() {
    return (
      <div id="app" onClick={this.handleClick.bind(this)}>
        My Name is {this.state.name}
        <hr />
        <Sub /> {/*父组件的render,会引起下一级组件的更新流程,导致props重新发送,即使子组件props没有
  改变过*/}
      </div>);
  }
}

ReactDom.render(<Root />, document.getElementById('root'));

在这里插入图片描述
componentWillMount 第一次装载,在首次render之前。例如控制state、props
componentDidMount 第一次装载结束,在首次render之后。例如控制state、props

componentWillReceiveProps 在组件内部,props是只读不可变的,但是这个函数可以接收到新的props,可以对props做一些处理,this.props = {name:‘roooooot’};这就是偷梁换柱。componentWillReceiveProps触发,也会走shouldComponentUpdate
shouldComponentUpdate 判断是否需要组件更新,就是是否render,精确的控制渲染,提高性能
componentWillUpdate 在除了首次render外,每次render前执行,componentDidUpdate在render之后调用

不过,大多数时候,用不上这些函数,这些钩子函数是为了精确的控制

修改Root组件render中的这一句为 <div id="root" onDoubleClick={this.handleClick.bind(this)}> ,可以看到点击Sub中红色的文字,Root不会重绘

如果子组件和父组件使用了相同的事件,可以认为点击子组件也是点击了父组件,父组件重绘,就会把子组件props更新,引起子组件组件更新流程,就会从componentWillReceiveProps开始执行。如果子组件自己修改自己的state,不会执行componentWillReceiveProps

函数式组件

  • React从15.0开始支持函数式组件,定义如下
import React from 'react';
import ReactDom from 'react-dom';

function Root(props) {
  return <div>{props.schoolName}</div>;
}
ReactDom.render(<Root schoolName="Hello World" />, document.getElementById('root'));

开发中,很多情况下,组件其实很简单,不需要state状态,也不需要使用生命周期函数
函数式组件的函数应该提供一个参数props,返回一个React元素
函数式组件的函数本身就是render函数

  • 改写上面代码
import React from 'react';
import ReactDom from 'react-dom';

let Root = props => <div>{props.schoolName}</div>;

ReactDom.render(<Root schoolName="Hello World" />, document.getElementById('root'));

以前函数式组件还有个名字叫stateless components无状态组件
当前React发布了16.8,已经可以在函数式组件中使用state了,所以官方建议叫函数式组件

使用 ReactPy 构建全栈 AI 应用程序 学习如何使用 React 在 Python 中构建漂亮的 UI! 迄今为止,有许多数据科学家想要学习成为全栈技能。了解如何(即使是最低限度)独立创建一个由后端和前端组成的简单应用程序是非常有用的。迄今为止,在人工智能领域,使用 Streamlit 和 Gradio 等工具开发前端是非常流行的。今天,我们还有 ReactPy,一个新生的库,它还不允许我们做伟大的事情,但它绝对是一个值得关注的库,因为我确信它会被越来越多地使用,并允许我们创建为必须使用我们的人工智能模型的用户提供出色的用户体验! 阅读详情

相关推荐

ReactPy:使用 Python 构建动态前端应用程序

但是,如果您更喜欢 Python 的多功能性和简单性作为后端,并且希望在前端也利用它的功能,该怎么办?无论您是希望提高前端技能的 Python 爱好者,还是寻求后端和前端技术之间无缝集成的开发人员,ReactPy 都可以成为您工具包的宝贵补充。例如,您可以定义一个包含照片和摄影师姓名的新函数,然后多次使用该函数,仅指定 url 和名称本身。读完本文后,您了解了 ReactPy 的基础知识,可以编写简单的前端应用程序并了解它们的工作原理。您可以添加更多元素,以便在您的网站中获得更多可能的状态。

t631791611的博客 631

Python语言实现React框架

迷途小书童的 Note读完需要6分钟速读仅需 2 分钟1 reactpy 介绍reactpy 是一个用 Python 语言实现的 ReactJS 框架。它可以让我们使用 Python 的方式来编写 React 的组件,构建用户界面。reactpy 的目标是想要将 React 的优秀特性带入 Python 领域,包括组件化、虚拟 DOM、声明式编程等。它可以无缝集成到我们的 Python 后端应...

2330

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

本文深入探讨了使用Cadence psspxf工具进行分频器PSRR仿真时常见的三大技术陷阱,包括扰动信号参数设置、收敛性优化和后处理信号提取。通过详细的参数推荐和实战技巧,帮助工程师避免仿真误差,提升PSRR分析效率与准确性,特别适用于16分频器等数字-模拟混合电路设计。

weixin_29258297的博客 300

【GitHub探索】用python写web前端之reactpy探索

你有想象过用python来写web前端这种操作么?本文就来探索reactpy,用python通过react的特性来编写前端页面,看能写出什么花样来。

HiKariのTechLab 2159

增程式永磁电机发电系统电压环二自由度控制器设计

本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高

weixin_44553616的博客 897

基于SSM的足浴管理系统(源码+开题)

研究内容: 本研究的内容主要包括以下几个方面:首先,我们需要对现有的足浴管理系统进行深入的研究和分析,了解其优缺点;最后,我们需要对新设计的系统进行评估和优化,以满足用户的需求和提升系统的使用体验。因此,开发一种基于SSM的足浴管理系统,能够有效地解决这些问题,提高足浴服务的质量和效率。研究目的: 本研究的主要目的是设计和实现一个功能完善、操作简便、用户体验良好的基于SSM的足浴管理系统。通过对系统的研究和设计,我们希望能够为足浴服务行业提供一个高效、便捷的工具,从而推动足浴服务行业的发展。

林科程序设计 1682

Python开发者必看,使用ReactPy和Python进行前端网页开发

ReactPy:使用Python搭建动态前端的应用程序。

weixin_39915649的博客 1697

RK平台PCIE-Ethernet扩展:Intel I210移植与性能飞升之路

本文详细介绍了Intel I210千兆以太网控制器在瑞芯微RK平台的移植与优化过程。通过硬件适配、内核配置、驱动开发及性能调优四个关键环节,实现了RK平台的网络性能提升。硬件方面,重点说明了PCIE接口的规范连接与供电检查;软件方面,系统阐述了内核配置、设备树修改和驱动编译流程。在性能优化环节,详细介绍了中断优化、缓冲区设置和TCP/IP协议栈调优策略,并采用Iperf和Netperf工具进行量化测试验证。测试结果显示,优化后的网络吞吐量提升20%以上,延迟降低40%,为工业控制、智能安防等场景提供了可靠的

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 350

React技术社区动态reactjs-interview-questions:最新趋势与技术演进

React作为现代前端开发的基石技术,其生态系统始终保持着快速迭代和创新的节奏。reactjs-interview-questions项目作为React技术社区的宝贵资源,不仅记录了React的发展历程,更反映了技术演进的最新趋势。本文将深入分析React技术栈的最新发展动态,帮助开发者把握技术脉搏。 ## React版本演进路线图 ```mermaid timeline title ...

gitblog_00572的博客 1019

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 288

以阿克曼转向车为例对URDF和XACRO文件进行解读

   最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文章就以这个阿克曼小车的XACRO文件为例,对URDF或XACRO文件的格式和内容进行解读,期望经过解读和学习,找到错误原因及所在,并解决这三个错误    先来放一下上面右图所示的模型的完整的XACRO文件: <?xml version="1.0"?> <!-- racecar.urdf.x

慕羽★的博客 3700

视频教程-React前端框架技术集 React+Redux-ReactJS

React前端框架技术集 React+Redux 知识传播美丽,分享传递快乐...

weixin_33379565的博客 212

【NVIDIA-GB200-1】国内第一份生产环境实战安装配置教程,配置安装脚本,nvidia gb200配置教程-复制即用;gb200驱动安装

GB200 的高性能通信依赖。

jundao1997的专栏 704

React技术栈——ReactJS

初始化 引入三个script: <script src="build/react.js"></script> <script src="build/react-dom.js"></script> <script src="https://cdnjs.cloudflare.com...

weixin_34015566的博客 92

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

百度母婴技术团队—基于Reactjs实现webapp #1

百度母婴技术团队—基于Reactjs实现webapp #1 Open my-fe opened this Issue 2 days ago · 16 comments <div class="discussion-sidebar js-socket-channel js-updatable-content " id="partial-d

周红伟讲AI 1482

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Reactjs-popup嵌套弹窗技术:复杂场景下的多层弹窗解决方案

在React应用开发中,弹窗组件是不可或缺的UI元素,但当业务逻辑变得复杂时,我们常常需要实现嵌套弹窗功能。**Reactjs-popup嵌套弹窗技术**提供了一套完整的解决方案,让开发者能够轻松处理多层弹窗、复杂交互场景。本文将深入探讨如何利用Reactjs-popup实现高效的多层弹窗系统,解决复杂UI交互中的技术难题。 ## 🔥 什么是嵌套弹窗技术? 嵌套弹窗技术允许在一个弹窗内部再打

gitblog_00099的博客 501

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

React技术栈一览

React技术栈一览 ES6、babel、webpack、ESlint、React、react-redux、react-router、UI框架 这些技术栈都需要进行配置支持,新手可能还没写一行React代码,就已经被各种技术栈名词淹没,迷失其中。 ES6 JavaScript的下一代标准,规定今后按年份发布新版。2015年发布的ECMAScript6.0,也叫ES2015。 学习React...

Calmlyx的博客 2385

react技术栈总结

React技术栈总结 React部分 基础概念 React是国外FackBook公司在2013年5月开源的一个用于构建用户界面的JavaScript库,它采用了组件化的思想。所谓组件化,就是将一些简短、独立的代码片段组合成复杂的 UI 界面,这些代码片段被称作“组件”。 React的一个愿景是,把浏览器兼容的问题解决了,让程序员不需要再和浏览器打交道,只需要和一个框架对接就好了。它这里边使用了一个Bable工具,能够将ES6的语法转译成ES5的语法,react-dom中也构建了一个虚拟库,使得代码可以在不同

m0_47955692的博客 1811

react相关技术总结

react相关技术总结 react中文文档 脚手架 created-react-app Create React App是FaceBook的React团队官方出的一个构建React单页面应用的脚手架工具。它本身集成了Webpack,并配置了一系列内置的loader和默认的npm的脚本,可以很轻松的实现零配置就可以快速开发React的应用。基本上需要自己去搭建项目结构,许多东西都不包括。 ├...

qq_42036203的博客 2654

React技术栈及前端技术总结

React技术栈及前端技术总结 基础 ECMAScript 6 阮一峰的《ECMAScript 6入门》 CommonJS CommonJS是一个规范,它的终极目标是制定一个像C++标准库一样的规范,使得基于CommonJS API的应用程序可以在不同的环境下运行。 CommonJS规范包括:...

choushiax229763的博客 454

终极React Stockcharts技术指标实战:EMA、MACD、RSI等60+指标的完整指南

React Stockcharts是一个基于ReactJS和d3构建的高度可定制股票图表库,提供60多种技术指标和丰富的可视化选项,帮助开发者轻松实现专业级金融图表。本文将带你快速掌握如何在项目中集成和使用EMA、MACD、RSI等核心技术指标,从零开始构建功能强大的股票分析工具。 ## 为什么选择React Stockcharts? React Stockcharts凭借其React组件化架

gitblog_00203的博客 618

react-native技术调研:react-native是什么?

如有疏漏错误,还望指正。转载不忘加上原链接哦~react-native是什么? react-native原理 从字面意思上来看,react-native由单词react和单词native组合而成,中间一个连字符连接。我们对其中的native的概念是很清晰的,它指的就是原生app,也就是用原生开发方式开发出来的应用。那么react又是什么呢?他们之间的连字符又有什么特殊的意义么?下面我们来一

yinzhida's blog 6903

React技术文档

第一章:React入门 1.1React简介 1.1.1官网 英文官网:https://reactjs.org/ 中文官网:https://react.docschina.org/ 1.1.2 相关库 react.js:React核心库。 react-dom.js:提供操作DOM的react扩展库。 babel.min.js:解析JSX语法代码转为JS代码的库。 1.1.3 语法: ReactDOM.render(virtualDOM,containerDOM) 作用: 将虚拟DOM元素渲染到页

王延朕的博客 4875

React 项目的构建以及技术栈的应用

索引目录: 1、使用 react-app my-app 脚手架构建React 项目运行环境 2、React 技术栈在实际项目中的应用(模块下载) 1、使用 react-app my-app 脚手架构建React 项目运行环境   当然这里我们使用react 官方提供的webpack 脚手架工具,这也是大多人的选择。如果您需要构建自己react 项目,便可大胆应用react 提供的creat...

China_Guanq的博客 1731
上一篇: React项目构建
下一篇: React之高阶组件
鹿夏
博客等级 码龄8年 24粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值