建议在完成Rails教程后,可以通过Udemy学习一些相关知识
首先
我去年从零开始在应用开发领域找到了工作。
当时我只完成了大约三遍的Rails教程,大概能写一些Rails的代码?差不多就是那种程度吧。但是在实际工作中,这显然远远不够,所以我参加了Udemy的各种课程来学习。
所以在这里,我想介绍一下我参加并且真正受益良多的课程和内容。
这些都是非常好的课程,但是每一章都有一些注意事项,在每一章的最后我都会写下来。
Docker:容器引擎。
现在已经是必须使用Docker来搭建开发环境了。
虽然大家都听过Docker这个词,但并不是很了解。有这样的声音偶尔出现。
我也是用来构建环境的吧?我对此的理解大概就是这样。
因此,我参加了以下的课程。
从零开始使用Docker构建应用程序执行环境。
在这个解释中,Docker被描述为一个可以在实际中使用的工具,能够帮助我们创建并搭建Rails环境,同时详细解释了如何使用docker-compose进行操作。
注意事项:最后有Swarm的解释,但现在的事实标准是Kubernetes,简称k8s(很酷),所以或许不需要特别关注这部分。(当然,这部分也会有所收获)
回应
如果能够在Docker上进行环境搭建,我希望将Rails配置为API模式作为后端,并采用现代化的方法来实现前端。我想使用React来实现。
如果完成了Rails教程,我认为你可能已经了解jQuery,并且可能已经使用Slim来编写Rails的View。但是,现在我们要将后端和前端进行分离,Rails只需要通过API返回数据,而前端的渲染可以使用React来实现。
React有两种写法,一种是类组件,另一种是函数组件。
官方虽然没有计划要废弃类组件的支持,但建议在新项目中可以用函数组件来编写,所以他们可能更偏向于函数组件。(并没有说一定要使用函数组件)
自React v16.8开始引入了Hooks,使得函数组件能够处理状态。最近我只在函数组件中编写代码,事实上我只学习了函数组件,所以只会写函数组件,哈哈哈。
在以下视频中,您可以学习如何使用Hooks来使用函数组件。
【哈姆式】React Hooks 入门 – 结合Hooks和Redux学习最新的前端状态管理技巧
※ 注意事项
本课程基本上没有关于类组件的讲解。虽然您可以在编码中不使用类组件,但还是建议您学习一些基本的类组件知识,以便至少能够大致阅读相关代码。
个人而言,我平时不怎么写类组件,但我学习过一些能够稍微阅读类组件代码的知识。
GraphQL is a query language and runtime for APIs that provides a more efficient and flexible alternative to traditional RESTful APIs.
我认为你大概已经对Rails教程中的REST API有了一些理解。
实际上,你可能没有意识到API的存在,但是在routes.rb文件中,我们可以把URL与具体操作关联起来,这就是REST API。
接下来,我们可以学习其他的API协议。
简单地解释一下,比如说,在REST API中,当访问像/users这样的URL时,你可以获取所有用户的全部信息。但有时候你可能只希望得到所有用户的名字,对吧?
这样的话,所有用户的ID和头像URL之类的无用数据也会传递给前端。
由于GraphQL可以请求所需的数据,因此可以仅获取所有用户的名称。
此外,由于模式本身就是API的规范书,因此开发速度会提高(诚实地说,这取决于时间和情况,所以不是绝对正确的翻译)。
总的来说,在REST API中,需要创建一个规范文档来说明针对某个URL传递什么内容会返回什么结果。但在GraphQL中,创建规范文档本身就成为API的实现,因此不需要专门另外创建规范文档的感觉。
【哈姆式】面向前端工程师的React入门GraphQL
※注意事项
本讲座可了解GraphQL是什么,但实际上不涵盖如何实现API。如果要在Rails中进行实施,我们将使用名为graphql-ruby的gem进行实施。
总结
通过Docker构建环境,使用Rails创建GraphQL的API,并且能够用React来制作前端。
在React中处理GraphQL需要使用一个GraphQL客户端,我认为Apollo Client是最知名的,所以请参考各种资料进行实施。
顺便一提,在React的视频中也能学到一些Redux,但我平时不使用Redux。原因是以前尝试使用Redux时与Apollo Client发生了冲突。
我认为Apollo Client本身具有管理状态的功能,而且只要不是非常复杂的情况下,使用Hooks中的useContext足以应对,不一定需要使用Redux。
我认为,完成Rails教程后,按照这个顺序逐步学习这些内容会很好,这只是我的一点经验。