零、前言

关于印象派画家克洛德·莫内,查尔斯·塞尚有一句名言:“莫奈只是一只眼睛,但却是一只眼睛!”今天,我们可以类似地说,“ReactJS[或者如果你愿意的话]”,ReactJS 只是一种观点,但这是一种什么观点!"

ReactJS 既没有意图也没有野心成为一个完整的、通用的网络框架。它甚至不包括 Ajax 调用的工具!相反,目的是您将使用对应用中的不同问题有意义的技术,并使用 ReactJS 的强大工具进行视图和用户界面开发。

函数式反应式编程一直是一个非常悬而未决的问题,对于纯粹的数学期望来说,它的进入有着令人望而却步的障碍。不再使用 ReactJS!一个没有特别深厚的数学背景的资深 C++程序员——我说这些是为了挑选那些在堆栈溢出上不断说他们没有函数式反应编程的程序员——是一个很有可能使用 ReactJS 完成真正工作的资深程序员。

这本书是关于 ReactJS 的,这是一种简单而又小的技术,尽管如此,它还是让庞大的团队在一个网页的不同组件上一起工作,而不会互相踩在对方的脚上,也不会有任何官僚措施的暗示。再加入一些仙尘的免费帮助。

这本书涵盖了什么

第 1 章介绍和安装,提供了不同编程范例的 10000 英尺概述,每种范例都有其优势,并介绍了函数式编程、反应式编程和函数式反应式编程三者。

第二章核心 JavaScript ,涵盖了 JavaScript 的一些更好的邻居,省略了雷区,欠道格拉斯·克洛克福特一笔债,如果不是一份完整的协议的话。就您使用的 JavaScript 部分而言,您应该在这个核心中完成大部分工作。

第 3 章反应式编程–基本理论,是对反应式理论或反应式编程的基本探索,特别是与脸书的 ReactJS 用户界面框架相关。

第 4 章演示非函数式反应式编程——一个活生生的例子,证明并非所有的开发都是从头开始的。大多数专业工作不是绿地。这将提供一个改造一个简单的视频游戏的真实例子,最新的实现使用 jQuery,以利用 ReactJS(如果你正在使用 ReactJS,你可能会做从 jQuery 到 ReactJS 的其他转换)。

第 5 章学习函数式编程——基础知识,如果你想了解函数式编程但不知道从何下手,会对你有所帮助。这里有一个开始的地方!映射、减少和过滤是一个无穷无尽的技巧包。

第 6 章函数式反应式编程–基础知识,涵盖了关于功能编程和反应式编程的内容。它将与一些圣人的建议放在一起,最后一点将为这本书剩下的实践工作奠定基础。

第 7 章没有重新发明轮子——函数式反应式编程的工具,一本书包含了很多内容,更不用说一章了。但是这里应该有一个有趣的例子,这里有很多有趣的选项,包括用 JavaScript 以外的语言编写 ReactJS 代码。

第 8 章演示 JavaScript 中的函数式反应式编程——一个真实的例子,第一部分,在这里我们看到一个应用包含了一个用 ReactJS 从头开始编写的异想天开的 ReactJS 组件,并展示了甜蜜的 JSX 语法糖,它不是必需的,但仍然可以用于 ReactJS 开发。

第 9 章用一个真实的例子演示 JavaScript 中的函数式反应式编程第二部分–待办事项列表,引导我们找到第一个真正的组件,它被设计用来使用而不仅仅是娱乐。我们实现了一个待办事项列表,除了“完成”之外,它还有几个标记来指示任务的状态、优先级和其他内容。

第 10 章演示 JavaScript 中的函数式反应编程:一个真实的例子第三部分–一个日历,是我们构建日历的地方。它旨在优雅地不仅支持一次性事件,而且支持人们提供的各种规则的多种重复事件。

第 11 章用一个真实的例子演示 JavaScript 中的函数式反应式编程第四部分–添加草稿栏并将其组合起来,提供了一个带有 CKeditor 的富文本草稿栏。这展示了我们如何与其他用户界面工具进行互操作。然后,我们将这四个组件组合成一个组合页面,并添加持久性功能,这样我们的用户界面就不会忘记它被告知的内容。

第 12 章一切如何契合,回顾了我们在本书中所涵盖的内容,并展望了一个有待探索的世界的下一步。

附录一个 Node.js Kick start ,介绍了“狂野西部”技术的一些好的、坏的和丑陋的方面,每个人似乎都想参与其中。

这本书你需要什么

有一点软件需要下载,你将需要一个至少可以提供静态内容的网络服务器。附录Node.js 涵盖了在 Node.js 中为更大的项目构建一个 web 服务器,但是所有章节都可以只使用一个 web 服务器,它将以最基本的方式提供静态内容。您将需要一台台式计算机,它几乎可以是任何可以运行 Node.js 的东西(如果您选择通过附录工作的话)。文本将在 Unix、Linux、Mac、Windows、Cygwin 等环境下运行良好。如果你想在移动设备上运行它,这可能是一个值得称赞的方法,但是请在使用一些标准服务器或桌面操作系统的设备(桌面或其他)上工作。

然而,你真正需要的只是一个服务器或桌面,一个浏览器,比如 Chrome,一个网络服务器,以及一个钻研新事物的意愿。其他一切都在正文中提供。

这本书是给谁的

这本书是为那些想钻研函数式反应式编程和脸书反应式编程的程序员准备的。人们期望一些通用的编程成熟度,一些 JavaScript 知识,以及一些产生用户界面的知识。熟悉函数式编程也是有所帮助的几件事之一,但无论是否实现,希望是编写一本书,任何通用语言的资深程序员只要对 JavaScript 和 web 开发有一些(也许是浅显的)知识,就能使用这本书来完成工作。

那些在前端网络开发和 JavaScript 功能核心方面确实有扎实背景的人可能会惊讶于使用 ReactJS 是多么容易,并且可能会发现这就像在黄油上切一把热刀。

惯例

在这本书里,你会发现许多区分不同种类信息的文本样式。以下是这些风格的一些例子和对它们的意义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:typeof函数返回一个包含类型描述的字符串;因此,typeof可以提供扩展类型。”

代码块设置如下:

   var counter = (function() {
     var value = 0;
     return {
       get_value: function() {
         return value;
       },
       increment_value: function() {
         value += 1;
       }
     }
   })();

任何命令行输入或输出都编写如下:

python -c "import binascii; print binascii.hexlify(open('/dev/random').read(1024))"

新名词重要词语以粗体显示。你在屏幕上看到的单词,例如,在菜单或对话框中,出现在如下文本中:“当安装程序启动时,点击下一步,如下所示:”

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它有助于我们开发出你真正能从中获益的标题。

要给我们发送一般反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在您的邮件主题中提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参见我们位于www.packtpub.com/authors的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您在http://www.packtpub.com的账户下载您购买的所有 Packt Publishing 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请前往https://www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

盗版

互联网上版权材料的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决问题。