基于Antd框架的通信与交互

1、与用户交互

对于input输入框,在于用户交互的过程中,用户在输入任何东西时,都会引起该组件的onChange事件(如果写有这个方法的话)。

<FormItem
{...formItemLayout}
style={{ display: getFieldValue('type') === '活动' ? 'none' : 'block' }}
label={<span>跳转网址</span>}
>
<Input
id="target"
placeholder="活动无需输入网址"
onChange={e => {
this.onChange1(e);
}}
style={{ width: 300 }}
/>
</FormItem>

可以看到,input输入框一般放在表单里,所以用FormItem将他框起来,在input组件的属性中,首先进行数据绑定,id就是用于和后端交互的数据(命名一定要匹配),不仅有使用id这个方法,我们还可以使用getFieldDecorator方法进行绑定(以后再介绍),然后是placeholder属性,这个属性是组件提示显示词。再就是style这个属性,自然不用介绍了,在formItem这个大的style展示之后,再进行细微的调整。最后就是onChange方法了,这里的写法可以看到,e这个参数可以任意取名,将e传到onChange方法,现在我们看看onChange方法。

  onChange1 = e => {
console.log(e.target.value);
this.state.target = e.target.value;
};

这里我先将用户的输入打印出来,每次输入(哪怕是一个单词)都会引起该方法的调用,然后用

this.state=e.target.value

这个语句是将用户的输入传给该组件的状态state,那么无论输入什么,该网页的状态总是保持最新的状态(与用户保持一致)

要注意的是,state这个东西可以由我们自己创建,可以一个组件对应一个state,也可以多个组件对应一个state

            <FormItem
{...formItemLayout}
label={<span>选择活动</span>}
style={{ display: getFieldValue('type') === '活动' ? 'block' : 'none' }}
>
<Select
id="target"
placeholder="选择活动"
style={{ width: 300 }}
onChange={e => {
this.handleActivity2(e);
}}
>
{list.map(it => (
<Select.Option key={it.id} value={it.title}>
{it.title}
</Select.Option>
))}
</Select>
</FormItem> <FormItem
{...formItemLayout}
style={{ display: getFieldValue('type') === '活动' ? 'none' : 'block' }}
label={<span>跳转网址</span>}
>
<Input
id="target"
placeholder="活动无需输入网址"
onChange={e => {
this.onChange1(e);
}}
style={{ width: 300 }}
/>
</FormItem>

这段代码实现了组件动态关联(下面再介绍),可以看到,两个formItem里的组件:input和select都是绑定的‘target’这一state,共同实现对他的修改,下面看看handleActivity这一方法的实现。

  handleActivity2 = e => {
console.log(e);
this.state.target = e;
};

这里我也有一点不懂的地方,为什么select组件在调用onChange方法的时候也是传e,但在方法体中,e才是用户的输入,而不是e.target.value。

2、与后端交互

在完成上述用户对每个页面的参数修改以后,state就是记录着这些数据,然后通过点击“确认”按钮,就可以提交表单了

<Button type="primary" htmlType="submit"loading={submitting}>
确定
</Button>

这里,htmlType属性在antd中是用来指定样式的,该按钮是蓝色的,loading属性和加载相关,和性能相关,这里不仔细叙述,确认按钮在antd中会自动绑定到handleSubmit这一方法,该方法的实现:

  handleSubmit = e => {
const { dispatch } = this.props;
e.preventDefault();
if (this.refs.pics.state.fileList.length > 0)
this.state.image = this.refs.pics.state.fileList[0].response.url;
console.trace(this.state);
dispatch({
type: 'systemSetting/apiCreateRotation',
payload: {
image: this.state.image,
type: this.state.type,
target: this.state.target,
},
});
};

要想将数据传到后端,需要借助dispatch这一载体,该属性要想使用,一定要从this.props中取出来。之后是e.preventDefault语句,不加的话该方法不会有作用,在dispatch中,首先指定type,‘/’号的前面是model的名称,后面是model中的某个方法。payload则是具体载体,说明我该将哪些组件的state传给后端。下面给出model中调用的方法。

    *apiCreateRotation({ payload }, { call, put }) {
const response = yield call(apiCreateRotation, payload);
if (isResponseSuccess(response)) {
message.success('创建成功');
yield put({
type: 'createsuc',
payload: response,
});
} else {
message.error('创建失败:' + response.message);
}
},

该方法使用call调用到了后端的接口,该思想就是基于服务的软件开发,即:你给我接口和相应的使用规则,我给你发送数据,然后将处理后的数据再传给我。有效实现了前后端的分离,降低耦合度,这也算是学以致用了吧,至此,antd前后端的通信基本流程介绍完了。

基于Antd框架的通信与交互的更多相关文章

  1. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  2. QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件

    QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功 ...

  3. 基于laravel框架构建最小内容管理系统

    校园失物招领平台开发 --基于laravel框架构建最小内容管理系统 摘要 ​ 针对目前大学校园人口密度大.人群活动频繁.师生学习生活等物品容易遗失的基本现状,在分析传统失物招领过程中的工作效率低下. ...

  4. 基于SSH框架的学生公寓管理系统的质量属性

    系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信 ...

  5. 基于netty框架的Socket传输

    一.Netty框架介绍 什么是netty?先看下百度百科的解释:         Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开 ...

  6. 基于OpenSSL的HTTPS通信C++实现

      HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL.Nebula是一个为开发者提供一个快速开发 ...

  7. 基于SSH框架的在线考勤系统开发的质量属性

    我要开发的是一个基于SSH框架的在线考勤系统. 质量属性是指影响质量的相关因素,下面我将分别从6个系统质量属性(可用性,易用性,可修改性,性能,安全性,可测试性)来分析我的系统,以及如何实现这些质量属 ...

  8. 基于SSH框架的学生选课质量属性分析

    系统:学生选课系统 框架:SSH(Struts2+Spring+Hibernate) 我做的是基于SSH框架的学生选课系统.学生选课系统的特性:①系统响应时间短,能够快速调出课程数据供学生选课提交.② ...

  9. 基于SSH框架的网上书店系统开发的质量属性

    基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...

随机推荐

  1. winform(C#)里弹出“确定”“取消”对话框

    //消息框中需要显示哪些按钮,此处显示“确定”和“取消” MessageBoxButtons messButton = MessageBoxButtons.OKCancel; //"确定要退 ...

  2. HDU3746 Teacher YYF 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 题目大意:给你一个串 \(s\) ,要求 \(s\) 的开头或结尾添加最少的字符,使得添加后的串 ...

  3. Postman接口测试工具学习笔记

    - 新建测试接口 在Postman中有两种新建测试接口的方式,第一种是图片右上角的,点击可以选择 request 请求进行新建 选择 Request 以后会出现下面图片的对话框,让你输入一个保存接口的 ...

  4. Codeforces Round #340 (Div. 2) B. Chocolate

    题意:一段01串 分割成段 每段只能有一个1 问一段串有多少种分割方式 思路:两个1之间有一个0就有两种分割方式,然后根据分步乘法原理来做. (不过这里有一组0 1 0这种数据的话就不好直接处理,所以 ...

  5. 【u238】暴力摩托

    Time Limit: 1 second Memory Limit: 64 MB [问题描述] 晚会上大家在玩一款"暴力摩托"的游戏,它拥有非常逼真的画面和音响效果! 当然了,车子 ...

  6. Lavarel之环境配置 .env

    .env 文件位于项目根目录下,作为全局环境配置文件. 1. 配置参数 // 运行环境名称 APP_ENV=local // 调试模式,开发阶段启用,上线状态禁用. APP_DEBUG=true // ...

  7. vue组件中data是个函数

    当我们const vm = new Vue({ el : '#app',   data : { msg:‘hello World’ } })用习惯了,data是一个对象,可到了vue组件 Vue.co ...

  8. H3C 路由表查找规则(2)

  9. springmvc 参数校验/aop失效/@PathVariable 参数为空

    添加依赖 <!-- 参数校验 --> <dependency> <groupId>org.hibernate.validator</groupId> & ...

  10. ABP在MultipleDbContext也就是多库的场景下发布后异常“Could not find content root folder”问题处理

    ABP多库支持 ABP支持多库的方案在abp的案例中aspnetboilerplate-samples中给了现成的demo,其中MultipleDbContextDemo是EF的相关针对dotnet的 ...