想学习 React.js 吗?这是我的免费课程,通过构建一个聊天应用来讲解。
聊天正在席卷全球,而 React 正在蚕食前端开发。那么,还有什么比通过构建聊天应用来学习 React 更好的呢?在我最新的 Scrimba 课程中,你就能做到这一点。
它包含 17 个互动课程(加上简介和结尾)和 5 个挑战,您必须自己编辑代码。
最棒的是:这一切都在浏览器中完成。您无需编写任何服务器端代码。Chatkit API负责处理后端的繁重工作,这样我们就可以专注于构建聊天客户端。
课程结束后,你将拥有一个专属的个性化聊天应用,它包含多个聊天室、创建新聊天室、自动滚动等功能。此外,借助 CSS 网格和 CSS 变量,它还可以轻松自定义。
我假设你了解 JavaScript,并且之前对 React 有所了解(例如,阅读我这篇五分钟的入门文章,或者浏览一些教程)。除此之外,本课程没有任何先修课程要求。
现在让我们看看它是如何布局的!
第一课:课程介绍
首先,我会简单介绍一下这门课程。我们会讲解你将要学习的内容,我也会做个自我介绍。课程结束后,我还会提前告诉你如何定制你自己的聊天应用。
课程 #2:组件架构
在开始构建 React 应用之前,你应该先了解一下组件架构,并将 UI 拆分成组件。在本讲座中,我将向你展示如何做到这一点。
课程 #3:代码库架构
接下来,我们将看看我们的组件架构是如何转化为代码的。我还将介绍代码库其余部分的设置方法,以免您在开始编码后对代码库中的各种文件感到困惑。
我不会从头开始创建存储库,因为已经有很多教程可以帮助您设置开发环境,而这并不是 Scrimba 平台最适合的。
课程 #4:MessageList 组件
现在我们终于可以开始编写代码了,所以在本课中,我们将在组件中渲染虚拟数据MessageList
。本课将向您介绍 JSX,并学习如何使用例如map()
数组方法等动态创建元素。
{DUMMY_DATA.map((message, index) => {
return (
<div key={index} className="message">
<div className="message-username">{message.senderId}</div>
<div className="message-text">{message.text}</div>
</div>
)
})}
在本课中您还将面临您的第一个挑战!
第五课:Chatkit 简介
[!单击图像以获取 Chatkit API。]( https://pusher.com/chatkit?utm_source=scrimba&utm_medium=medium&utm_campaign=announcment-post )
单击图像即可访问 Chatkit API。
现在我们已经能够在页面上渲染数据了,接下来我们将开始集成Chatkit API,它将负责处理应用的后端。在本课中,我将简要介绍一下该 API。
课程#6:连接到Chatkit
接下来只需编写Chatkit集成代码,非常简单:上面的代码就足以让你从聊天室获取消息。你将接触到 React 的componentDidMount()
生命周期方法,你需要在这里将组件与第三方 API 连接起来。
课程 #7:状态和属性
在 React 中,我们处理数据的两种方式是 state 和 props,你需要了解两者之间的区别。在本课中,我们需要同时使用这两种类型,因为我们既要将聊天消息存储在App
组件的 state 中,也要将它们作为 props 传递给MessageList
组件。
constructor() {
super()
this.state = {
messages: []
}
}
第 8 课:消息组件
在本讲座中,我们将构建 Message 组件。它的任务是:渲染从父组件传递过来的用户名和文本。我还将给你一个挑战,将它从基于类的组件转换为函数式组件。
function Message(props) {
return (
<div className="message">
<div className="message-username">{props.username}</div>
<div className="message-text">{props.text}</div>
</div>
)
}
课程 #9:SendMessageForm 组件
如果没有表单来发送消息,聊天应用就无法运行。所以在本讲座中,我们将创建一个这样的表单。本讲座将讲解受控组件,这是 React 中一个至关重要的概念。这意味着组件本身决定在输入字段中渲染什么,而不是由 DOM 节点本身来保存内部状态。
课程 #10:广播消息
sendMessage(text) {
this.currentUser.sendMessage({
text,
roodId: 9434230
})
}
现在我们已经准备SendMessageForm
好了,我们需要将消息发送给 Chatkit,以便它可以广播它们。这将迫使你学习 React 的另一个核心概念:逆数据流。
在 React 中,数据向下流动,从父组件流向子组件。然而,有时我们需要子组件向上访问其父组件并触发其方法,同时传递一些来自子组件自身的数据。
第 11 课:RoomList 组件
由于我们现在已经具备了核心聊天功能(发送和显示消息),现在是时候跳转到RoomList
组件了,该组件显示您在 Chatkit 实例上可用的所有房间。
它将向您介绍 Chatkit 中的一些新概念,并巩固您关于如何从父组件向子组件发送数据的知识。我们还将重新讨论 ES6 扩展运算符,它在构建 React.js 应用时非常有用。
第十二课:订阅房间
然后,你需要学习如何订阅特定的房间。我们将为组件中显示的每个房间连接一个事件监听器RoomList
。这将触发组件中的一个方法App
,该方法会告诉 Chatkit 用户想要订阅该特定房间。
subscribeToRoom(roomId) {
this.setState({ messages: [] })
this.currentUser.subscribeToRoom({
roomId: roomId,
hooks: {
onNewMessage: message => {
this.setState({
messages: [...this.state.messages, message]
})
}
}
})
}
第 13 课:房间顺序和突出显示当前房间
本讲座将向您介绍 .sort()
JavaScript 中的数组方法,因为我们需要确保我们的房间按正确的顺序排序,无论数据最初来自哪里。
const orderedRooms = [...this.props.rooms].sort((a, b) => a.id - b.id)
我们还将active
向当前聊天的房间添加一个类别,以便向用户发出信号。
第 14 课:添加自动滚动
自动滚动功能用于在MessageList
组件中自动跳转到最新消息。这是一个巧妙的小技巧,它向您介绍了以下组件生命周期方法:
componentWillUpdate()
componentDidUpdate()
我们还需要使用该ReactDOM.findDOMNode()
方法,因此您也会了解该方法。
第 15 课:NewRoomForm 组件
此组件允许您创建新房间。它将复习第九课中关于受控组件的知识。
至此,我们完成了应用的所有 React 代码。接下来的课程内容,我们将专注于使用 CSS 进行设计。
第 16 课:创建自己的聊天应用
在开始修改应用设计之前,我想先克隆一下我的代码,这样你就能获得自己的代码库副本了。这能为接下来的截屏视频做好准备,之后你可以对应用进行个性化设计。我会指导你完成每个步骤,直到你获得自己的副本和 Chatkit 的免费 API 密钥。
第 17 课:使用 CSS Grid 更改布局
我们使用 CSS Grid 来控制应用程序的布局,这在更改布局时为您提供了极大的灵活性,这要归功于grid-template-areas
。我将教您如何仅通过更改几行 CSS 代码即可在页面上移动元素。
第 18 课:使用 CSS 变量更改主题
由于我们使用 CSS 变量来设置颜色,因此你也可以轻松更改应用的主题。在这里,我将向你提出一个挑战:在网上找到一个好看的调色板,然后将其应用到你的应用中。
如果你把上一课的布局变化和这节课的新调色板结合起来,你就能得到一个完全属于你自己的个性化聊天应用!下面就是我自己做的一个,纯粹为了好玩:
第 19 课:结尾和结束的挑战
如果你能走到这一步:恭喜!你确实为提升技能付出了努力,我百分之百相信你会有所回报。在这个截屏视频中,我会提供一些最后的挑战,如果你真的有勇气的话,可以尝试一下。
在您离开之前,我还想提一下,我们有一个免费的React 入门课程和一个 12 小时以上的React Bootcamp,可以让您从业余爱好者一路成长为专业的 React 开发人员。
感谢阅读!我叫 Per,是Scrimba的联合创始人,我热爱帮助人们学习新技能。如果您想及时收到新文章和资源的通知,请在Twitter上关注我。
祝课程顺利,编码愉快:)
鏂囩珷鏉簮锛�https://dev.to/scrimba/want-to-learn-react-js-here-s-my-free-course-which-teaches-it-by-building-a-chat-app-1i6p