> 웹 프론트엔드 > JS 튜토리얼 > React.js를 어떻게 사용하나요? React.js의 간단한 사용법 소개(예제 포함)

React.js를 어떻게 사용하나요? React.js의 간단한 사용법 소개(예제 포함)

寻∝梦
풀어 주다: 2018-09-11 15:43:40
원래의
4265명이 탐색했습니다.

이 글에서는 주로 react.js 사용법을 다루므로, 리액트가 생각보다 어렵지 않다는 것을 누구나 알 수 있습니다. 이제 이 글의 구체적인 내용을 살펴보겠습니다.

1, React은 모두 컴포넌트화되어 있습니다. #🎜 🎜#

React는 재사용 가능한 구성 요소라는 개념을 중심으로 설계되었습니다. 작은 구성요소를 정의하고 이를 결합하여 더 큰 구성요소를 형성합니다. 크기에 관계없이 모든 구성 요소는 다른 프로젝트에서도 재사용이 가능합니다.

React

가장 간단한 형태의 구성 요소는 일반적인 JavaScript입니다. 함수: # 🎜🎜#

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

예 1: 위 코드를 편집하고 Ctrl+Enter를 눌러 실행합니다. (번역자 주: 번역에는 이 기능이 없습니다. 당분간 이 기능을 사용하시려면 원문을 참고해주세요. 아래 동일)

괄호 안의 버튼 라벨은 나중에 설명하겠습니다. 이제 걱정하지 마세요. ReactDOM에 대해서도 나중에 설명하겠지만, 이 예제와 이후의 모든 예제를 테스트하려면 위의 render 함수가 필요합니다. (React가 인계하고 제어하는 ​​것은 대상 DOM 요소인 ReactDOM.render의 두 번째 매개변수입니다.) jsComplete REPL에서는 특수 변수 mountNode를 사용할 수 있습니다.

예제 1 에 대한 참고 사항:

구성 요소 이름의 첫 글자는 대문자로 표시됩니다(Button). 이는 HTML 요소와 React 요소의 혼합을 다루기 때문에 필요합니다. 소문자 이름은 HTML 요소용으로 예약되어 있습니다. 실제로 React 구성 요소의 이름을 "버튼"으로 지정하면 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 함수는 고급 함수이자 문서입니다. createElement 동일한 기능이지만 React 구성 요소를 나타내는 요소를 만드는 데 사용할 수도 있습니다. 위의 예제 2에서 Button 구성 요소를 사용할 때 후자를 사용하고 있습니다.

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 组件(例如,通过

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿