3分钟 React 试用:简单上手 Hello World
3 分钟 React 试用
想了解 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 的用法:import
和 export 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 个与现有组件非常相似的新组件,将它们分配给变量 Hello
和 World
,然后在底部 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”,在 World
的 render
函数内部,可以通过 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:验证输入
验证传递给 World
的 who
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 上发布。