首页 web前端 js教程 React.js怎么使用?react.js的简单使用方法介绍(附实例)

React.js怎么使用?react.js的简单使用方法介绍(附实例)

Sep 11, 2018 pm 03:43 PM
javascript

本篇文章主要讲述的是关于react.js的使用,让大家看看react不是想象中的那么难。现在就让我们来看看这篇文章的具体内容吧

1、React全部都是组件化的

React 是围绕可重用组件的概念设计的。你定义小组件并将它们组合在一起形成更大的组件。

无论大小,所有组件都是可重用的,甚至在不同的项目中也是如此。

React 组件最简单的形式,就是一个普通的 JavaScript函数:

function Button (props) {
  // 这里返回一个 DOM元素,例如:
  return <buttontype="submit">{props.label}</button>;
}
// 将按钮组件呈现给浏览器
ReactDOM.render(<Buttonlabel="Save" />, mountNode)
登录后复制

例 1:编辑上面的代码并按Ctrl+Enter 键执行(译者注:译文暂时没有这个功能,请访问原文使用此功能,下同)

括号中的 button 标签将稍后解释。现在不要担心它们。ReactDOM 也将稍后解释,但如果你想测试这个例子和所有接下来的例子,上述render 函数是必须的。(React 将要接管和控制的是ReactDOM.render 的第 2 个参数即目标 DOM元素)。在 jsComplete REPL 中,你可以使用特殊的变量 mountNode。

例 1 的注意事项:

组件名称首字母大写,Button。必须要这样做是因为我们将处理 HTML 元素和 React 元素的混合。小写名称是为 HTML 元素保留的。事实上,将 React 组件命名为 “button” 然后你就会发现 ReactDOM 会忽略这个函数,仅仅是将其作为一个普通的空 HTML 按钮来渲染。

每个组件都接收一个属性列表,就像 HTML元素一样。在 React 中,这个列表被称为属性。虽然你可以将一个函数随意命名。

在上面 Button 函数组件的返回输出中,我们奇怪地写了段看上去像 HTML 的代码。这实际上既不是 JavaScript 也不是 HTML,老实说,这甚至不是 React.js。然而它非常流行,以至于成为 React 应用程序中的默认值。这就是所谓的 JSX,这是一个JavaScript 的扩展。JSX 也是一个折中方案!继续尝试并在上面的函数中返回其他 HTML 元素,看看它们是如何被支持的(例如,返回一个文本输入元素)。

2、 JSX输出的是什么?

上面的例 1 可以用没有 JSX的纯 React.js 编写,如下:

function Button (props) {
  return React.createElement(
    "button",
    { type: "submit" },
    props.label
  );
} 
// 要使用 Button,你可以这么做
ReactDOM.render(
  React.createElement(Button, { label:"Save" }),
  mountNode
);
登录后复制

例 2:不使用 JSX编写 React 组件

在 React 顶级 API 中,createElement 函数是主函数。这是你需要学习的 7 个 API 中的 1 个。React 的 API 就是这么小。

就像 DOM 自身有一个document.createElement 函数来创建一个由标签名指定的元素一样,React 的 createElement 函数是一个高级函数,有和document.createElement 同样的功能,但它也可以用于创建一个表示 React 组件的元素。当我们使用上面例 2 中的按钮组件时,我们使用的是后者。

不像 document.createElement,React 的 createElement 在接收第二个参数后,接收一个动态参数,它表示所创建元素的子元素。所以 createElement 实际上创建了一个树。

这里就是这样的一个例子:

const InputForm = React.createElement(
  "form",
  { target: "_blank", action:"https://google.com/search" },
  React.createElement("p",null, "Enter input and click Search"),
  React.createElement("input", {className: "big-input" }),
  React.createElement(Button, { label:"Search" })
);
// InputForm 使用 Button组件,所以我们需要这样做:
function Button (props) {
  return React.createElement(
    "button",
    { type: "submit" },
    props.label
  );
}
// 然后我们可以通过 .render方法直接使用 InputForm
ReactDOM.render(InputForm, mountNode);
登录后复制

例 3:React创建元素的 API

上面例子中的一些事情值得注意:

InputForm 不是一个 React组件;它仅仅是一个 React 元素。这就是为什么我们可以在ReactDOM.render 中直接使用它并且可以在调用时不使用 的原因。(想看更多就到PHP中文网React参考手册栏目中学习)

React.createElement函数在前两个参数后接收了多个参数。从第3个参数开始的参数列表构成了创建元素的子项列表。

我们可以嵌套 React.createElement调用,因为它是 JavaScript。

当这个元素不需要属性时,React.createElement的第二个参数可以为空或者是一个空对象。

我们可以在 React 组件中混合HTML 元素。你可以将 HTML 元素作为内置的 React组件。

React 的 API试图和 DOM API 一样,这就是为什么我们在 input 元素中使用 className 代替 class 的原因。我们都希望如果 React 的 API 成为 DOM API 本身的一部分,因为,你知道,它要好得多。

上述的代码是当你引入 React 库的时候浏览器是怎样理解的。浏览器不会处理任何 JSX 业务。然而,我们更喜欢看到和使用 HTML,而不是那些 createElement 调用(想象一下只使用document.createElement 构建一个网站!)。这就是 JSX 存在的原因。取代上述调用 React.createElement 的方式,我们可以使用一个非常简单类似于HTML 的语法:

const InputForm =
  <form target="_blank"action="https://google.com/search">
    <p>Enter input and clickSearch</p>
    <inputclassName="big-input" name="q" />
    <Buttonlabel="Search" />
  </form>;
// InputForm “仍然”使用 Button 组件,所以我们也需要这样。
// JXS 或者普通的表单都会这样做
function Button (props) {
  // 这里返回一个 DOM元素。例如:
  return <buttontype="submit">{props.label}</button>;
}
// 然后我们可以直接通过 .render使用 InputForm
ReactDOM.render(InputForm, mountNode);
登录后复制

例 4:为什么在 React中 JSX 受欢迎(和例3 相比)

注意上面的几件事:

这不是 HTML 代码。比如,我们仍然可以使用 className 代替 class。

我们仍在考虑怎样让上述的 JavaScript看起来像是 HTML。看一下我在最后是怎样添加的。

我们在上面(例 4)中写的就是 JSX。然而,我们要将编译后的版本(例 3)给浏览器。要做到这一点,我们需要使用一个预处理器将 JSX 版本转换为 React.createElement 版本。

这就是 JSX。这是一种折中的方案,允许我们用类似 HTML 的语法来编写我们的 React 组件,这是一个很好的方法。

“Flux” 在头部作为韵脚来使用,但它也是一个非常受欢迎的应用架构,由 Facebook推广。最出名的是 Redux,Flux 和 React 非常合适。

JSX,可以单独使用,不仅仅适用于 React

3、 你可以在 JavaScript的任何地方使用 JSX

在 JSX 中,你可以在一对花括号内使用任何 JavaScript 表达式。

const RandomValue = () =>
  <p>
    { Math.floor(Math.random() * 100)}
  </p>;
// 使用:
ReactDOM.render(<RandomValue />,mountNode);
登录后复制

例 5:在 JSX中使用 JavaScript 表达式

任何 JavaScript 表达式可以直接放在花括号中。这相当于在 JavaScript 中插入 ${} 模板。

这是 JSX 内唯一的约束:只有表达式。例如,你不能使用 if 语句,但三元表达式是可以的。

JavaScript 变量也是表达式,所以当组件接受属性列表时(不包括 RandomValue组件,props 是可选择的),你可以在花括号里使用这些属性。我们在上述(例 1)的 Button 组件是这样使用的。

JavaScript 对象也是表达式。有些时候我们在花括号中使用 JavaScript对象,这看起来像是使用了两个花括号,但是在花括号中确实只有一个对象。其中一个用例就是将 CSS 样式对象传递给响应中的特殊样式属性:

const ErrorDisplay = ({message}) =>
  <p style={ { color: &#39;red&#39;,backgroundColor: &#39;yellow&#39; } }>
    {message}
  </p>;
// 使用
ReactDOM.render(
  <ErrorDisplay
    message="These aren&#39;t thedroids you&#39;re looking for"
  />,
  mountNode
);
登录后复制

例 6:一个对象传递特殊的 React样式参数

注意我解构的只是在属性参数之外的信息。这只是 JavaScript。还要注意上面的样式属性是一个特殊的属性(同样,它不是 HTML,它更接近 DOM API)。我们使用一个对象作为样式属性的值并且这个对象定义样式就像我们使用 JavaScript 那样(我们可以这样做)。

你可以在 JSX 中使用 React 元素。因为这也是一个表达式(记住,一个 React 元素只是一个函数调用):

const MaybeError = ({errorMessage}) =>
  <p>
    {errorMessage &&<ErrorDisplay message={errorMessage} />}
  </p>;
// MaybeError 组件使用 ErrorDisplay组件
const ErrorDisplay = ({message}) =>
  <p style={ { color: &#39;red&#39;,backgroundColor: &#39;yellow&#39; } }>
    {message}
  </p>;
// 现在我们使用 MaybeError组件:
ReactDOM.render(
  <MaybeError
    errorMessage={Math.random() >0.5 ? &#39;Not good&#39; : &#39;&#39;}
  />,
  mountNode
);
登录后复制

例 7:一个 React元素是一个可以通过 {} 使用的表达式

上述 MaybeError 组件只会在有errorMessage 传入或者另外有一个空的 p 才会显示 ErrorDisplay 组件。React 认为 {true}、 {false}

{undefined} 和 {null} 是有效元素,不呈现任何内容。

我们也可以在 JSX 中使用所有的JavaScript 的集合方法(map、reduce 、filter、 concat 等)。因为他们返回的也是表达式:

const Doubler = ({value=[1, 2, 3]}) =>
  <p>
    {value.map(e => e * 2)}
  </p>;
// 使用下面内容 
ReactDOM.render(<Doubler />, mountNode);
登录后复制

例 8:在 {}中使用数组

请注意我是如何给出上述 value 属性的默认值的,因为这全部都只是 JavaScript。注意我只是在 p 中输出一个数组表达式。React 是完全可以的。它只会在文本节点中放置每一个加倍的值。

4、 你可以使用 JavaScript类写 React 组件

简单的函数组件非常适合简单的需求,但是有的时候我们需要的更多。React也支持通过使用 JavaScript 类来创建组件。这里 Button 组件(在例 1 中)就是使用类的语法编写的。

class Button extends React.Component {
  render() {
    return<button>{this.props.label}</button>;
  }
}
// 使用(相同的语法)
ReactDOM.render(<Buttonlabel="Save" />, mountNode);
登录后复制

例 9:使用 JavaScript类创建组件

类的语法是非常简单的:定义一个扩展的 React.Component类(另一个你需要学习的 React 的顶级 API)。该类定义了一个单一的实例函数 —— render(),并使函数返回虚拟 DOM 对象。每一次我们使用基于类的 Button 组件(例如,通过

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统 如何使用WebSocket和JavaScript实现在线语音识别系统 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术 WebSocket与JavaScript:实现实时监控系统的关键技术 Dec 17, 2023 pm 05:30 PM

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统 如何利用JavaScript和WebSocket实现实时在线点餐系统 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

如何使用WebSocket和JavaScript实现在线预约系统 如何使用WebSocket和JavaScript实现在线预约系统 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

JavaScript和WebSocket:打造高效的实时天气预报系统 JavaScript和WebSocket:打造高效的实时天气预报系统 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

javascript中如何使用insertBefore javascript中如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

JavaScript和WebSocket:打造高效的实时图像处理系统 JavaScript和WebSocket:打造高效的实时图像处理系统 Dec 17, 2023 am 08:41 AM

JavaScript是一种广泛应用于Web开发的编程语言,而WebSocket则是一种用于实时通信的网络协议。结合二者的强大功能,我们可以打造一个高效的实时图像处理系统。本文将介绍如何利用JavaScript和WebSocket来实现这个系统,并提供具体的代码示例。首先,我们需要明确实时图像处理系统的需求和目标。假设我们有一个摄像头设备,可以采集实时的图像数

See all articles