react +mock.js 实现留言列表

  • cindy Liu
  • 11 Minutes
  • September 18, 2018

近期闲暇时间近期闲暇时间,自己动手做了一个留言板模板,运用mock.js+react.js 来实现。这是一个很简单的demo,其中运用到了组件与组件之间传值、提交留言后滚动到页面最底部、easy-mock的使用

1. 使用create-react-app创建项目并初始化

1
2
3
4
5
create-react-app message_board

cd message_board

npm start

注意创建的项目文件名只能使用小写字母

2.在原有项目结构中新增文件夹如下

assets (用于放置资源文件 如.img)

common(常量)

components (自定义组件库)

layout (主要页面布局)

3. 创建主要模块

在layout文件夹下创建一个页面 Home

并在components文件夹下创建两个组件模块 分别为

MessageForm (留言板表单模块)

MessageList (留言板显示模块)

现文件结构如下

4.接下来搭建每个组件的结构,将两个组件合并起来在Home页面中正常显示,主要代码如下

1
2
3
4
5
6
7
8
9
10
11
12
//留言板表单模块
// /components/MessageForm/index.js
import React from 'react'

class MessageForm extends React.Component {
render() {
return (
<div> this is MessageForm</div>
)
}
}
export default MessageForm

上面是MessageForm组件的代码,剩下两个MessageList MessageAlert写法如上,
接着在/layout/Home中引入三个组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React from 'react'
import MessageForm from '../../components/MessageForm'
import MessageList from '../../components/MessageList'

class Home extends React.Component{
render(){
return(
<div>
<MessageForm />
<MessageList />
</div>
)
}
}
export default Home

页面展示如下


这说明两个组件可以在页面上正常显示,接着我们将分别编写三个组件 实现各自功能

5.MessageForm 留言板表单模块

本demo采用蚂蚁金服框架antd来开发,引入方法详见https://ant.design/docs/react/use-with-create-react-app-cn
使用 babel-plugin-import 按需加载组件代码和样式的 babel 插件

1
2
3
antd npm install
npm install babel-plugin-import
npm run eject

修改package.json中的 “babel”: { “presets”: [ “react-app” ], “plugins”: [ [ “import”, { “libraryName”: “antd”, “style”: true } ] ] },

配置less less-loader css-modules 详见 https://www.jianshu.com/p/51ff1c8be301

之后便可以按需载入所需组件,其中包括标题的input框、留言内容的textarea、提交按钮及重置按钮,使用方法可以详见antd官网,主要代码内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <div className="msgFrom">
<Divider orientation="left">发表留言</Divider>
<Form layout="inline" onSubmit={this.handleSubmit} >
<FormItem >
{getFieldDecorator('title', {
rules: [{ required: true, message: '请输入标题!' }],
})(
<Input size="large" placeholder="请输入标题" />
)}
</FormItem>
<FormItem>
{getFieldDecorator('massage', {
rules: [{ required: true, message: '请输入留言内容!' }],
})(
<TextArea rows={5} placeholder="请输入留言内容" />
)}
</FormItem>
<FormItem style={{textAlign:'right'}}>
<Button type="primary" className="submit" htmlType="submit">发表</Button>
<Button type="primary" htmlType="reset" onClick={this.resetClick.bind(this)}> 重置</Button>
</FormItem>
</Form>
</div>

页面显示效果为

6.MessageList 留言板列表展示模块

留言板展示模块比较简单,使用列表List组件来显示,主要代码如下:

1
2
3
4
5
6
7
8
9
10
<div style={{padding:'30px'}}>
<List itemLayout="horizontal" dataSource={data} renderItem={item => (
<List.Item>
<List.Item.Meta
avatar={<Avatar src={require('../../assets/head.png')} />}
title={item.title}
description={item.massage} />
</List.Item>
)} />
</div>

页面显示效果如下:

7.其他效果的实现

本demo的完整实现还不仅如此,其中还涉及到了组件与组件之间的传值、提交留言后滚动到页面最底部、easy-mock的使用,这些效果实现方法将在另外文章中详细说明