java 开源任务管理,《彻底掌握redux》之开发一个任务管理平台(上)

前言

redux是上手react开发的必经之路,也是目前react项目中使用的最流行状态管理库。虽然我们不使用redux也可以通过react的state和父子props进行基本的数据通信和项目开发,但是对于一个大型项目而言,往往考虑的更多的是代码结构和组件之间的通信,我们需要一种很优雅且有利于扩展的方式去开发我们的复杂系统,所以这种情况下使用redux是最佳的选择。

由于之前有朋友希望快速上手一下redux开发,所以笔者特意开发了一个小项目,希望通过这个项目可以让大家快速掌握redux及其生态的使用方式,以便今后在技术选型上有更多的空间。

你将收获

redux的工作机制和基本概念

redux的使用模式

redux相关生态的使用(react-redux, keymirror, reduce-reducers)

异步action解决方案redux-thunk

项目技术选型和架构

基于react实现一个可用的任务管理平台

如何实现自己的js工具库

正文

1. redux的工作机制和基本概念

7789bd768236fa409c8537acfa5a265d.png

以上是笔者画的一个草图,描述了redux的数据流转机制。首先是用户触发action(在代码层面只有dispatch才能触发action),这时store会自动调用reducer函数并传入上一个状态的state和action,reducer函数会返回一个新的state,这个时候store会监听state的变化并调用监听函数,此时我们的react组件就会重新渲染并生成新的view。

redux的设计思想核心就是把web应用当作一个状态机,视图和状态一一对应,所有的状态都保存在一个对象里。

由上图可以看出redux几个核心api就是

store 保存数据的容器

state 某个时刻store的快照

action 标识当前要执行的动作。 action是改变 State 的唯一方式

dispatch 执行action的唯一方式

reducer 计算并生成一个新state的方式

我们只要理清它们的关系和工作机制,redux也就能轻松使用了。

2. redux的使用模式

redux的基本工作流程熟悉之后,我们来看看如何将redux运用在项目中。以下是使用redux的基本步骤,大家可以参考一下:

定义初始化的state

定义action

编写reducer函数

使用dispatch触发action

基本代码如下:

// 1. 定义初始化的state

const initSate = {

num: 0

}

// 2. 定义action

function add() {

return {

type: 'INCREMENT'

}

}

function dec() {

return {

type: 'DECREMENT'

}

}

// 3. 编写reducer函数

const reducer = (state = initState, action) => {

switch (action.type) {

case 'INCREMENT': return {...state, {num: state.num + 1}}

case 'DECREMENT': return {...state, {num: state.num - 1}}

default: return state;

}

}

// 创建store

const store = createStore(reducer)

// 4. 使用dispatch触发action

const renderView = () => {

ReactDOM.render(

value={store.getState()}

add={() => store.dispatch(add())}

dec={() => store.dispatch(dec())}

/>,

document.getElementById('root')

);

};

renderView();

store.subscribe(renderView);

复制代码

通过以上的步骤我们就可以基本开始redux开发了,redux还提供了中间件机制,暴露了applyMiddleware, compose等API,这里我们先简单提一下,后续会涉及到相关的使用。

实际项目中我们往往不会直接使用redux,我们会搭配使用react-redux等库,通过将react和redux以更优雅的方式结合到一起来开发更加可维护的项目。

3. redux相关生态的使用(react-redux, keymirror, reduce-reducers)

3.1 react-redux

react-redux的核心思想是将所有组件分成渲染组件(纯组件)和容器组件(负责处理业务逻辑和状态),渲染组件只负责展示,没有状态,容器组件负责处理各种状态和逻辑。所以用户只需要提供渲染组件来呈现视图,容器组件会由react-redux自动生成。所以整个过程看上去像这样:dfc431b267150b939393d401618bb86c.png

我们来看看如何使用react-redux。首先它提供了connect方法用于从 UI 组件生成容器组件,并将UI组件和容器组件连接在一起,具体用法如下:

import { connect } from 'react-redux'

const HomeContainer = connect(

mapStateToProps,

mapDispatchToProps

)(Home)

复制代码

home是我们的UI组件,通过mapStateToProps, mapDispatchToProps这两个函数参数,我们可以将redux的store和action映射到UI组件的props上,这样我们就可以实现正常的数据单向流转。

mapStateToProps的作用就是建立一个从(外部的)state对象到(UI 组件的)props对象的映射关系,我们一般可以这么定义:

const mapStateToProps = (state) => {

let { capacity } = state

return { capacity }

}

复制代码

返回的capacity就是我们要传给某个UI组件的props里的某个属性。

mapDispatchToProps用来建立 UI 组件的参数到store.dispat

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[《彻底掌握redux》之开发一个任务管理平台(上)]http://www.zyiz.net/tech/detail-110526.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《分布式任务调度平台XXL-JOB》 一、简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 1.2 特性 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2、动态:支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,即时生效; 3、调度HA:“调度中心”基于集群Quartz实现,可保证调度中心HA; 4、任务HA:任务支持多地址配置,可保证任务执行HA; 5、任务Failover:多地址配置时,调度失败时将会平滑切换执行器进行Failover; 6、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性; 7、自定义任务参数:支持在线配置调度任务入参,即时生效; 8、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞; 9、执行日志:支持在线查看调度结果,并且查看完整的执行日志; 10、邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件; 11、支持登录验证; 12、GLUE:提供Web IDE,支持在线开发任务逻辑代码,动态发布,实时编译生效,省略部署上线的过程。支持30个版本的历史版本回溯。 12、数据加密:调度中心和执行器之间的通讯进行数据加密,提升调度信息安全性; 14、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔; 15、推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, 方便用户接入和使用; 1.3 发展 于2015年中,我在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计…… 于2015-11月,XXL-JOB终于REALEASE了第一个大版本V1.0, 随后我将之发布到OSCHINA,XXL-JOB在OSCHINA上获得了@红薯的热门推荐,同期分别达到了OSCHINA的“热门动弹”排行第一和git.oschina的开源软件月热度排行第一,在此特别感谢红薯,感谢大家的关注和支持。 于2015-12月,我将XXL-JOB发表到我司内部知识库,并且得到内部同事认可。 于2016-01月我司展开XXL-JOB的内部接入和定制工作,在此感谢袁某和尹某两位同事的贡献,同时也感谢内部其他给与关注与支持的同事。我司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。据最新统计, 自2016-01-21接入至2016-07-20期间,该系统已调度72000余次,表现优异。新接入应用推荐使用最新版本,因为经过数个大版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。 至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,截止2016-07-19为止,XXL-JOB已接入的公司包括不限于:- 1、大众点评; - 2、山东学而网络科技有限公司; - 3、安徽慧通互联科技有限公司; - 4、人人聚财金服; - 5、上海棠棣信息科技股份有限公司 - 6、运满满 - 7、米其林(中国区) - 8、妈妈联盟 - 9、九樱天下(北京)信息技术有限公司 - 10、万普拉斯科技有限公司(一加手机) - ……欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。 1.4 下载 源码地址 (将会在两个git仓库同步发布最新代码)github地址git.osc地址 中央仓库地址 (将会把上个版本的公共依赖,推送到中央仓库)<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->     com.xuxueli     xxl-job-core     1.4.1 博客地址oschina地址cnblogs地址csdn地址 技术交流群(仅作技术交流):367260654 标签:任务调度  job  作业调度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值