65.9K
CodeProject 正在变化。 阅读更多。
Home

3分钟 React 试用:简单上手 Hello World

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (2投票s)

2016 年 4 月 21 日

CPOL

6分钟阅读

viewsIcon

12466

3 分钟 React 试用

3 Minute React Test Drive

想了解 React,但还没写过任何代码?

也许你读过一些博客,看过一些视频,试图理解所有组件如何协同工作……你想在开始构建之前理解一切。而组件又如此之多!React、Flux/Redux、Router,等等等等。

同时,React 的基础知识似乎又太过简单。

“React 表面看起来很简单……组件基本上就是根据当前状态返回视图的函数。这样真的能应对大规模开发吗?”

那么,让我们直奔主题:不写代码就很难评估一个库,所以我们现在就来解决这个问题 :)

在这篇文章中,我将向你展示如何在 3 分钟内写出 Hello World,然后你就可以在此基础上随意探索了。

我们将使用纯 React 来完成——这意味着你不需要担心 Redux、路由,甚至不需要配置构建工具或克隆样板项目!

步骤 0

请确保你已安装 Node.js 和 npm。如果没有,在这里获取。我假设你已经安装好了。这不计入 3 分钟之内。

步骤 1

安装 react-heatpack。打开终端/命令提示符并运行

npm install -g react-heatpack

React Heatpack 是一个很棒的工具,可以让你神奇地跳过所有构建的烦人设置,直接开始编写应用程序。这也是最耗时的一步。

第二步

创建一个新目录。可以随意命名。react-hello 是个不错的名字。

步骤 3

在该目录中创建一个文件,命名为index.js,然后键入以下代码

手动输入?像个野人一样?
手动输入比简单复制粘贴更能深刻地烙印在你的脑海中。你在形成新的神经通路。这些通路有一天会理解 React。帮助它们一把。
import React from 'react'

export default React.createClass({
  render: function() {
    return <div>Hello React!</div>
  }
})

这里有一些 ES6 的用法:importexport default……如果看起来陌生,暂时忽略它(React 也可以用 ES5 *或* ES6 编写得很好)。

步骤 4

从该目录内,运行开发服务器并将你的index.js 文件名传递给它

heatpack index.js
步骤 5

在浏览器中打开 https://:3000 (我甚至给你提供了链接!)

步骤 6

没有第 6 步。应用程序正在运行!你写了一个 React 应用!是不是很迷你?

接下来是什么?

首先,我想提一下我有一个通讯,大约每周都会收到类似这样的文章。如果听起来不错,请点击下方的按钮订阅。

<button class="cta-button" data-remodal-target="signup-modal">Send me more posts like this!</button>

现在我们已经有了基础框架,请按照下面的练习进行,学习更多知识!

练习 1:大规模重构

代码太冗余了。请创建一个 Hello 组件来渲染“Hello”,创建一个 World 组件来渲染“world!”。然后在底部的那个主组件中,并将它们并排渲染。

提示:你可以创建 2 个与现有组件非常相似的新组件,将它们分配给变量 HelloWorld,然后在底部 render 函数中将它们引用为 <Hello/> <World/>……

输入这些代码,按刷新(或者不按!react-heatpack 自带热重载!),并确保它仍然有效。

放弃了?点击查看答案。
import React from 'react'

var Hello = React.createClass({
  render: function() {
    return <span>Hello</span>
  }
})

var World = React.createClass({
  render: function() {
    return <span>world!</span>
  }
})

export default React.createClass({
  render: function() {
    return <div><Hello/> <World/></div>
  }
})

练习 2:使组件通用

如果我们能向任何人打招呼就更好了。修改 World 组件以接受一个名为 who 的 prop。如果提供了 who,则渲染该值(带感叹号)。如果未提供 who,则只渲染“world!”。

提示:在使用 React 元素时,可以提供属性,例如 <World who="Dave"/>。这些属性称为“props”,在 Worldrender 函数内部,可以通过 this.props 访问,例如 this.props.who

如果你有一个 JSX 元素(这就是 <span>world!</span>),并且想在其中执行一个表达式,你可以将其放在大括号内,例如 <span>{this.props.who}!</span>。你也可以在其中放置条件语句,如 ?||&&——它只是 JavaScript——但它必须是一个单独的表达式。

放弃了?点击查看答案。
import React from 'react'

var Hello = React.createClass({
  render: function() {
    return <span>Hello</span>
  }
})

var World = React.createClass({
  render: function() {
    return <span>{this.props.who || 'world'}!</span>
  }
})

// Alternatively, use a ternary operator:
var World_v2 = React.createClass({
  render: function() {
    return <span>{this.props.who ? this.props.who : 'world'}!</span>
  }
})

// Or even split out the logic into its own function:
var World_v3 = React.createClass({
  getPerson: function() {
    return this.props.who || 'world';
  },

  render: function() {
    return <span>{this.getPerson()}!</span>
  }
})

export default React.createClass({
  render: function() {
    return <div><Hello/> <World who="Dave"/></div>
  }
})

练习 3:验证输入

验证传递给 Worldwho prop 实际上是一个字符串(但仍将其设为可选)。

提示:React 有一个很棒的功能叫做 PropTypes,它可以让你定义传递给组件的每个 prop 所期望的类型。

如果你习惯了 Angular 的指令,以及它们在忘记传递必需参数时如何默默失败,那么这个功能就相当惊人了。在你犯错时会得到真实的错误消息!

PropTypes 定义在组件上,作为属性,如下所示

React.createClass({
	propTypes: {
		name: React.PropTypes.string.isRequired,
		age: React.PropTypes.number, // optional
		parent: React.PropTypes.object.isRequired
	},
	render: function() {
		...
	}
})

当 React 渲染此组件时,它将检查传递的 props 并确保它们与 propTypes 匹配。如果不匹配,你将在控制台中收到一个警告。

放弃了?点击查看答案。
import React from 'react'

var Hello = React.createClass({
  render: function() {
    return <span>Hello</span>
  }
})

var World = React.createClass({
  propTypes: {
    who: React.PropTypes.string
  },

  render: function() {
    return <span>{this.props.who || 'world'}!</span>
  }
})

export default React.createClass({
  render: function() {
    return <div><Hello/> <World who="Dave"/></div>
  }
})

练习 4:弄坏它

打开浏览器控制台,然后大闹一场!(注意消息)

  • 尝试从底部的那个主组件中返回 <Hello/><World/>(移除包裹的 <div>
  • 尝试将数字传递给 World,例如 <World who={42}/>
  • 尝试传递 who={null}
  • 尝试 who={undefined}。这和根本不传递 who 一样吗?
  • 尝试将 who prop 设置为必需的,然后再次尝试上面的更改。

下一步该做什么

React 世界充满了各种选项。Redux、Reflux、Alt……react-router、redux-simple-router……Webpack、Babel、Browserify……

那么,接下来你应该学习哪个?

这是一个陷阱题:答案是,现在,一个都不用。不,连 Redux 也不用。

现在就开始掌握纯 React。通过编写更多组件并将它们连接起来,将这些概念巩固在你的脑海中。学习 PropTypes在每个组件中使用它们(这将为你节省大量调试时间!)。

实际上,你可以用纯 React 走得很远。从“UI 优先”的角度来处理你的前几个应用程序。换句话说,不要担心从服务器获取数据、保存记录等。从你知道格式的静态数据开始,并通过组合 React 组件来渲染这些静态数据。

这是很强大的:一旦你意识到,给定一个固定的数据集,你可以将其分解并完美地渲染它,你所要做的就是将其连接到真实的实时数据,一切都会奏效。

想要一些练习用的小组件的灵感吗?我很快就会有一篇关于这个的文章!订阅我的通讯,文章出来时你就会收到。

一步一步学习 React

Webpack、Redux 和 Flux?天哪!不要不知所措。获取碎片化的教程,更有效地学习。

3 分钟 React 试用:最简单的 Hello World 最初由 Dave Ceddia 于 2016 年 4 月 17 日在 Angularity 上发布。

© . All rights reserved.