React 是用于构建用户界面的 JavaScript 库,主要用来写 HTML 页面或者构建web应用
由 FaceBook 在 2013 年开源的一个用于构建用户界面的 JavaScript 库。
编码方式分为声明式和命令式两种,比如说:
命令式编码需要告诉浏览器怎么做,而声明式只需要告诉浏览器做什么就好了。
在 React 中我们不需要直接进行 DOM 操作,只需要通过 JSX 的语法完成 UI 的编写。原生 JS 操作 DOM 都是使用的 DOM-API,编写繁琐且执行效率低。而 React 避免了这些问题。
任何的页面都会被抽象成一棵组件树。树上的每一个节点,我们都可以开发出一个个独立可复用的小组件。
而在 React 中我们可以通过关键字 class 来定义一个组件,render 方法中返回的就是这个组件的 UI 视图。
React Native源自React,它是React在原生移动应用平台的衍生产物,支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSx,以及 CSS来开发移动应用,因此熟悉 Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。
React VR 是一个用于创建在浏览器中运行的VR应用程序的框架。它将 WebGL和 WebVR 等现代 api 与 React 的声明能力结合在一起,产生可以通过各种设备消费的体验。利用网络技术和现有的 React 生态系统,ReactVR 旨在简化 360 体验的构建,并将VR内容的创造大众化。
安装命令:npm i react react-dom
启动成功后,浏览器会自动跳到该页面:
import React from 'react'
import ReactDOM from 'react-dom'
JSX 是 JavaScript XML 的简写,表示在 JavaScript 代码中写 XML(HTML)格式的代码。
优势:声明式语法更加直观,与 HTML 结构相同,降低了学习成本、提升开发效率。
// 使用 JSX 语法,创建 react 元素:
const title = Hello JSX
// 渲染创建好的 React 元素
ReactDOM.render(title, root)
const hello = 'Hello';
const dv = ({hello}, World!);
const loadData = () => {
if(isLoading){
return Loading...;
}
return complete !;
}
const dv = (
{loadData()}
);
const users = {
{id: 1, name: '许世鹏'},
{id: 2, name: '张鹏'},
{id: 3, name: '邹泽鹏'}
};
const list = (
{users.map(item => - {item.name}
)}
);
JSX的样式处理
JSX的样式处理
样式写在 .css 文件中,引入直接 import 'css文件路径' 即可。
// 函数组件
function Hello{
return (
这是我的第一个函数组件!
);
}
// 渲染组件
ReactDOM.render( , document.getElementById('root'));
class Hello extends React.Component {
render() {
return Hello Class;
}
}
ReactDOM.render( , document.getElementById('root'));
import React from 'react';
class Hello extends React.Component {
render() {
return Hello Class;
}
}
export default Hello;
import React from 'react';
class Hello extends React.Component {
handleClick() {
alert('Hello');
}
render() {
return Hello Class;
}
}
export default Hello;
import React from 'react';
class Hello extends React.Component {
handleClick(e) {
//阻止浏览器的默认行为
e.preventDefault();
alert('Hello');
}
render() {
return Hello Class;
}
}
export default Hello;
使用 state 来每秒增加一个斐波那契数列的值:
import React from "react";
import './index.css';
class HelloWorld extends React.Component {
static defaultProps = {
a: 0,
b: 1
}
state = {
list: [0, 1],
};
render() {
return {this.state.list.join(', ')}
;
}
componentDidMount() {
setInterval(() => {
const [a, b] = this.state.list.slice(-2);
this.setState({list: [...this.state.list, a + b]});
}, 1000);
}
}
export default HelloWorld;
JSX 中掺杂过多 JS 逻辑代码,会显得非常混乱,推荐将逻辑抽离到单独的方法中,保证 JSX 结构清晰,但是分到方法中后,this 的值会变为 undefined,导致运行报错,因此我们希望 this 能够指向组件示例。
import React from 'react';
class Hello extends React.Component {
state = {
a: 0
};
onIncrement(){
this.setState({a: this.state.a + 1});
alert(this.state.a);
}
render() {
return ;
}
}
export default Hello;
import React from 'react';
class Hello extends React.Component {
state = {
a: 0
};
onIncrement(){
this.setState({a: this.state.a + 1});
alert(this.state.a);
}
constructor(){
super();
this.onIncrement = this.onIncrement.bind(this);
}
render() {
return ;
}
}
export default Hello;
import React from 'react';
class Hello extends React.Component {
state = {
a: 0
};
onIncrement = () => {
this.setState({a: this.state.a + 1});
alert(this.state.a);
}
render() {
return ;
}
}
export default Hello;
使用步骤:
state = {txt: ''};
this.setState({ txt: e.target.value})}/>
多表单元素优化步骤:
//根据表单元素类型获取值
const value = target.type === 'checkbox'? target.checked: target.value;
//根据 name 设置对应 state
this.setState({
[name]: value
});
使用步骤:
constructor() {
super();
this.txtRef = React.createRef();
}
console.log(this.txtRef.current.value);
本文章整理自:黑马程序员前端React视频教程,react零基础入门原理详解到好客租房项目实战_哔哩哔哩_bilibili ,仅供学习使用。