react-memory:基于 nodejs + bower + react 的文字记忆游戏
文章目录
前言
现在最热门的前端框架,毫无疑问是 React,React 是由 Facebook 出品的 JavaScript 框架,由于该框架比较新,比较少中文的资料。这几天看了很多篇关于 react 的英文文章,不得不说 React 是创建大型、快速的 Web 应用的最好方式。在本文中,我们将通过一步一步的创建一个简单的文字记忆游戏,来体验 React 的思想和强大之处。
PS: 由于对 React 的学习也是皮毛,但是在这里,我希望这个小游戏能够成为学习 React 的最佳开发结构,并且随着自己的不断学习,将会继续改进和完善这里的代码。假如您有任何的建议和反馈,请给我留言,谢谢!
在开始之前我们先来看看我们的 demo,游戏非常简单,输入想要记忆的文字,然后点击开始记忆即可。试玩了我们的游戏之后,那么现在就开始吧。
先来看看我们的目录结构,你可以在 GitHub 上找到相对应的源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
├── bower_components │ ├── bootstrap │ └── jquery ├── node_modules │ ├── browserify │ ├── lodash │ ├── react │ ├── reactify │ └── watchify ├── docs │ ├── component.dot │ └── component.png ├── build │ └── app.js ├── css │ └── style.css ├── index.html ├── js │ ├── app.js │ ├── board.js │ ├── game.js │ ├── status.js │ ├── tile.js │ └── word-form.js ├── bower.json ├── package.json └── README.md |
- bower_components 和 bower.json 是安装 bower 组件的目录和配置信息。
- node_modules 和 package.json 是安装 npm 模块的目录和配置信息。
- docs 用于存放我们的文档信息。
- css 和 js 用于存放样式和 JavaScript 源码。
- build 用于存放最后编译的 css 和 js 文件。
- index.html 是我们游戏的主页面,也就是 React 的入口。
初始化
- 首先,创建 npm 模块的配置文件 package.json
|
|
- 接着,创建 bower 组件的配置文件 bower.json
|
|
- 安装所需要的依赖包
|
|
可以看到,我们安装了运行游戏时所需要的依赖包:react,lodash 模块,以及 bootstrap 组件,lodash 是一个非常实用的工具库,游戏中我们使用到了好多它所提供的操作 array 的简单方法,react 和 bootstrap 的话就不用说了。
React 组件依赖层次
React 中都是以组件的方式来体现的,从上往下,我们切割成非常小、功能单一的组件,分别是: * Game:游戏组件 * WordForm:文字输入组价 * Board:游戏面板组件 * Status:游戏状态组价 * Tile:单个卡片组件
组件模板
由于我们使用了 nodejs 的开发方式以及 React 独有的 JSX 语法,我们组件的模板为:
|
|
对于各行代码的意思,已加了详细的注释说明,在下面的 js 代码中,也是一样在代码中做了详细注释,由于我们只关注组件的核心部分,与模板相同的地方,我们就不做解释了。
Game
创建文件:js/game.js
|
|
WordForm
- 新建文件:
js/word-form.js
|
|
- 由于用用到了 bootstrap 的样式和自定义了 error 样式,需要创建
css/style.css
文件
|
|
Boar
新建文件:js/board.js
|
|
Status
新建文件status.js
|
|
Tile
- 新建文件
tile.js
|
|
- 修改文件
css/style.css
,增加卡片需要的样式
|
|
app.js
创建好了我们所有的组件之后,我们需要将组件组合起来,创建文件app.js
|
|
index.html
新建文件:index.html
|
|
查看结果
- 开始编译监听 jsx 文件为 js
|
|
- 启用 http server
|
|
大功告成,开始开心的游戏吧!
文章作者 wenzhixin
上次更新 2015-06-07