Skip to main content

10 w2 Catbook in React

W2: Catbook in React

react复习部分略。

官方库:
https://github.com/weblab-workshops/catbook-react

官方代码(只包含相关代码,不包含其它内容,无法运行):

我的代码:

w2使用方法与w0和w1相同,用 git checkout w2-starter 切换到w2部分。所以同样的,每次reset后会将原来的代码清除,但是课程鼓励我们设计自己的内容。在下面的笔记中只包含官方代码。

官方页面:

我的页面:

注意这一部分有一个client文件夹,文件夹内的src文件夹中包含了对应代码。ppt告诉我们只需要关注components文件夹中的JavaScript内容,并且只需要编辑components/pages中的Profile.js、components/modules中的CatHappiness.js、NavBar.js和Navbar.css四个文件。

另外,在执行 npm install 后,可以用 npm run hotloader 来运行代码,在 http://localhost:5050/ 看到网页。

npm 相关问题

在执行npm对应命令行时,可能出现各种报错。

npm install 卡住不动

这个网上有很多教程,一般是因为访问官方网站不稳定,需要切换镜像源。我使用的镜像源是 https://registry.npmmirror.com,输入以下命令配置

npm config set registry=https://registry.npmmirror.com

当然也可以用其它镜像源。

更换后,可以用 npm config get registry 查看换源是否成功。

npm install 出现报错

如果报错里出现了 permission denied 等类似的语句,是因为权限不足,在管理员模式下重新运行。

如果 npm install hotloader 成功运行,会出现 <i> [webpack-dev-server] Loopback: http://localhost:5050/ 等语句。和其它的命令一样,按Ctrl^C停止运行。

step 0

在Navbar.js和Navbar.css中实现Navbar。

注意nav标签代表navbar相关的容器。在NavBar.js中return相关内容,并且在NavBar.css中调整样式,可以参考old_index.html和old_style.css中的内容。

官方代码:

NavBar.js在return部分添加

<nav className="NavBar-container">
<div className="NavBar-title">Catbook</div>
</nav>

NavBar.css添加

 .NavBar-container {
padding: 8px 16px;
background-color: #396dff;
}

.NavBar-title {
color: white;
font-size: 20px;
}

step 1

这部分是完成CatHappiness元件。从ppt中看出,<app> 标签包括两部分 <NavBar><Profile><CatHappiness> 元件包含在 <Profile> 中。CatHappiness数值包含在 <Profile> 的state里,作为props传递给 <CatHappiness>

要完成这一步,要先添加catHappiness state,然后导入、实现、并且最终渲染这个元件。

这一步被具体分成四步来进行,以下是四步的官方代码(前三步改动在Profile.js中,最后一步在CatHappiness.js中):

step 1a

添加CatHappiness state

注意源代码里没有导入 useState,要将第一行改为

import React, { useState } from "react";

然后在Profile函数里添加

const [catHappiness, setCatHappiness] = useState(0);

step 1b

导入元件

import CatHappiness from "../modules/CatHappiness.js";

step 1c

添加CatHappiness元件,在return部分添加

<div className="Profile-subContainer u-textCenter">
<h4 className="Profile-subTitle">Cat Happiness</h4>
<CatHappiness catHappiness={catHappiness} />
</div>

step 1d

渲染CatHappiness

将CatHappiness.js中的CatHappiness函数进行如下修改

const CatHappiness = (props) => {
return (
<div className="CatHappiness-container">
<div className="CatHappiness-story">
<p className="CatHappiness-storyContent">{props.catHappiness}</p>
</div>
</div>
);
};

step 2

这一步要完成CatHappiness的更新:每次点击时CatHappiness加一。

每个 <div> 都有一个onClick属性(prop),当这个 <div> 被点击时,它会调用onClick函数。

首先实现 incrementCatHappiness 函数

const incrementCatHappiness = () => {
setCatHappiness(catHappiness + 1);
};

再在return部分修改

<div className="Profile-avatarContainer" onClick={incrementCatHappiness}>

官方代码完成后,使用 git checkout w2-complete 查看完成代码。