redux

好程序员web前端培训分享React学习笔记(三)

巧了我就是萌 提交于 2020-04-28 20:29:28
  好程序员web前端培训分享React学习笔记(三),组件的生命周期   React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个阶段,初始化、运行中、销毁、错误处理(16.3之后) 初始化 在组件初始化阶段会执行 .constructor .static getDerivedStateFromProps() .componentWillMount() / UNSAFE_componentWillMount() .render() .componentDidMount() 更新阶段 props或state的改变可能会引起组件的更新,组件重新渲染的过程中会调用以下方法: .componentWillReceiveProps() / UNSAFE_componentWillReceiveProps() .static getDerivedStateFromProps() .shouldComponentUpdate() .componentWillUpdate() / UNSAFE_componentWillUpdate() .render() .getSnapshotBeforeUpdate() .componentDidUpdate() 卸载阶段 .componentWillUnmount() 错误处理

React项目开发中的数据管理

我的梦境 提交于 2020-04-26 07:08:10
原文链接:https://blog.csdn.net/hl582567508/article/details/76982756 redux中文文档:http://cn.redux.js.org/ React项目开发中的数据管理   对于React的初学者在项目开发中常常还是会以DOM操作的思维方式去尝试获取、修改和传递数据,但是这种思想,在React思想中显然是错误的,针对这种情况下文将进行一个简易的总结。我们将从基础的纯React组件之间的传值开始论述,然后分析React结合Redux之间的数据传递,以及最后基于dva脚手架的数据传输问题进行探讨和分析。 一、 原生React组件的数据传输管理:   原生React组件之间的数据传输主要依赖于两个关键词:属性(props) 和状态(state)。每一个组件都是一个对象,props是对象的一个属性,组件对象可以通过props进行传递。React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据。state与props的最大区别在于props是不可变的而state是可变的。具体内容后面会详细讲解。 原生React组件之间数据传递场景可以分为以下四种: - 组件内部的数据传输 - “父组件”向“子组件”传值 - “子组件”向 “父组件”传值

【react】兄弟组件的通信方式,传统非redux

别等时光非礼了梦想. 提交于 2020-04-26 06:04:07
很多用过redux开发的朋友们都知道,一般兄弟组件通信可以使用redux。 redux也是近期在挤时间学习中。可能也不是很懂,说不定是有错误的理解,若有。现在虽然自己搭建了一个react+router+redux的环境,但是还不知道应该怎么用好。因为是完全自己使用webpack从头开始搭建的环境,很多搭建步骤都是网上搜的,每篇文章都不全。各种报错。然后继续百度搜错误解决办法,才把问题一个个解决。 现在的环境完成度也相对好点了。但是每个组件中都要写上2个方法也是比较蛋疼的。 mapStateToProps和mapDispatchToProps,用于将reducer转化成组件的props 这样组件就可以通过this.props.state拿到所有公用的state, this.props.方法名就能拿到mapDispatchToProps中定义的方法,如:this.props.d2_1({type:"add"}) 但是有部分公司或项目并没有使用到redux和router。 就要使用一种全局变量的事件监听的形式,最好就是做成一个公用方法来,方便后来调用。 //事件 var E={ //自定义事件集合 listeners: [], //自定义事件监听 listenner: { /** * 添加、注册 * @param ch {String} 事件(频道)名称 * @param

flutter i18n+redux实现国际化

自闭症网瘾萝莉.ら 提交于 2020-04-23 14:31:15
Flutter官方提供的实现 国际化 有些繁琐,需要自己实现WidgetsLocalizations,并且国际化的strings都是在代码中写的,而i18n插件可以自动生成这些代码,并且国际化的strings也是使用文件以json形式配置。加以使用redux实现语言切换及持久化。 Android Studio安装i18n插件 安装后在菜单栏中会有如下图标,点击用于生成i18n代码 项目中设置国际化 要使用flutter_localizations,将软件包作为依赖项添加到 pubspec.yaml 文件中: dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter 点击i18n插件按钮,在项目中会生成lib/generated/i18n.dart和lib/res/values/strings_en.arb。在strings_en.arb中配置英语显示的字符,如果要支持中文简体和中文繁体(香港),需要在lib/res/values文件夹中添加strings_zh_CN.arb、strings_zh_HK.arb,i18n插件也提供了图形化添加不同国家语言arb文件,并在arb文件中添加文本,如下所示: 点击i18n按钮,就会重新生成lib/generated/i18n.dart文件

@medux 数据流

隐身守侯 提交于 2020-04-22 16:25:20
欢迎您开始 @medux 之旅,建议您依次阅读以下 4 篇文章,这将耗费您大约 30 分钟。 为什么你需要 @medux @medux 基础概念速览 @medux 路由篇 @medux 数据流 第 4 篇:medux 数据流 -- Github 地址 --- @medux 数据流示意图 基于 Redux 因为 Medux 基于 Redux,所以部分数据流与 Redux 很相似,比如: 保持全局单例的 Store Store 和 View 之间使用单向数据流 改变 Store 数据,必须通过 Reducer 调用 Reducer 必须通过显式的 dispatch Action 模块化 Store 每个 module 仅能通过 reducer 修改 Store 下的某个一级子节点(moduleState),跨 module 不能直接修改 每个 module 可以读取所有 Store 的子节点 Store 一级子节点除了 moduleState 还可以是其它 ReduxReducers 管理的节点(比如 route),它们依然遵循以上原则 封装 Effect 将所有副作用封装在 Effect 中执行 Effect 要修改 Store,必须重新 dispatch Action 通过 Reducer 来执行 Effect 可以通过 dispatch Action 来触执行另一个 Effect

欢迎试用跨平台前端框架@medux

和自甴很熟 提交于 2020-04-22 16:24:51
欢迎您开始 @medux 之旅,建议您依次阅读以下 4 篇文章,这将耗费您大约 30 分钟。 为什么你需要 @medux @medux 基础概念速览 @medux 路由篇 @medux 数据流 为什么你需要 @medux -- Github 地址 --- 一站式解决方案 通常一个前端工程包含如下职能: UI 渲染框架 状态管理 路由管理 模块化管理(包括模块的定义、加载、维护) 结构化管理(如何组织各类文件与资源) 其中 UI 框架与宿主平台密切相关,比较独立且复杂,通常有多种不同风格的解决方案可供选择。而除此之外其它职能相对简单,基本上都可以抽象为通用跨平台的 JS 运行时。 所以简单来说, @medux 想创建一个可以对接不同 第三方UI框架 的通用前端框架,它包含统一的 状态管理 、 路由管理 、 模块化管理 、 结构化管理 等职能,可以广泛运行于支持 JS 运行时的平台上,这正是时下热门的 跨平台跨端 前端工程解决方案。 加厚的状态管理层 也许你还在犹豫是不是需要独立的状态管理层,因为把状态管理写在 UI 渲染层里似乎也挺顺手。但是在@medux 看来,你不仅需要把它们从 UI 中分离出来,而且还要尽可能的剥离多一点,因为: 状态层往往更抽象与稳定,UI 层更复杂与多变,将稳定的东西剥离出来可以减少改动 剥离状态管理后的 UI 更纯粹: UI=Render(State)

让微信小程序页面之间的通信不在变得困难

老子叫甜甜 提交于 2020-04-22 08:31:06
一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序。 有这样一个需求: 首页某个地方要展示购物车商品数量。 当我在其他页面加购了商品,首页数量刷新。 实现方式 方式一:onShow直接请求接口 Page({ onShow() { // ...一些逻辑 // 后端请求新的购物车数量 this .requestCartNum(); } }) 不足: 每次onShow都要请求接口,浪费资源。 方式二:globalData存储购物车数量,onShow中做刷新    // 主页.js Page({ onShow() { // 在globalData获取到购物车数据 let num = globalData.cartNum; if (num !== this.data.cartNum) { this.setData({ cartNum: num, }); } } }); // 加购页.js Page({ // 加购后改变globalData的值 cartAdd(num) { globalData.cartNum = globalData.cartNum + num; } }) 方式三:加购后获取首页实例,调用首页方法 // 首页.js Page({ onCartAdd(num) { this .setData({

从发布订阅模式到redux(一)

旧城冷巷雨未停 提交于 2020-04-22 06:30:21
最近在学习的过程中,学习了一些关于redux的一些知识,学之前用redux,虽然会用但是实现的原理就不是特别清楚,天天沉迷于搬砖 总是这木搬砖也不是个事啊,就准备开始深入了解一些原理性的东西 首先在看redux之前,我们要知道,redux和react没有关系,他想和谁玩就和谁玩,任何框架都行,redux本身就是一个状态管理器 好了,接下来在进入Redux之前,我们先来看一看一个模式,这个模式叫做观察者模式(又称发布订阅模式) 啥叫观察者模式,打个比方(注意,单身狗撤退,当心扎心),就是你家所有人都比较关心你,然后当你有了对象你告诉他们,老子有对象了,他们就会接收到这个信息,你有对象了 此处只描述肯定不行啊,有图才能有真相,好吧,今天让你们看看啥叫抽搐派大师 第一状态:啥都没发生 下面进入第二状态,你家亲人都关心你 第三状态:你有女朋友了,高声呼喊 第四状态,你的亲戚接收到你的信息 好了,发布订阅模式讲完了, 读者:!!!!你说什么呢,小老弟,你咋这木快,我都没感觉你就结束了? 又帅有聪明的我:咋说话呢,男人就不能说快,我一点都不快好吧,非常持久,不过上面的图真的就结束了发布订阅模式啊 读者:你TM的蒙我啊,找削啊 又帅又聪明的我:不是不是,这位大侠,你细听分说   我们来解析一下上图, 你===发布者,亲戚===订阅者 ,蓝色箭头==订阅   亲戚关心你

redux源码结合实践深入解析

若如初见. 提交于 2020-04-21 04:58:10
背景 redux作为前端状体管理中最亮眼的那个仔,非常有必要弄清楚他的原理。本文将从 源码结合实践 一起来重新认识redux。纯干货分享!!! redux相对来讲是相对比较复杂的状态管理工具。实现一个全局状态管理工具,通过一个全局变量和一些方法,即可实现的东西,那么为什么redux需要提出action,store,dispatch,reducer等一系列概念?提出这些概念的作用或者说动机是什么?希望读者能从这篇文章中深入理解这些概念存在的价值和意义。 export const store = createStore( reducer, applyMiddleware(sagaMiddleware) ); 复制代码 我们经常看到这段代码,本文将从以createStore作为入口顺藤摸瓜带你认识整个框架。 createStore 首先来看createStore函数源码, 为了方便理解和阅读省略了很多无关的代码,大家在阅读的时候可以折叠起来看。 export default function createStore ( reducer, preloadedState, enhancer ) { // 如果只有两个参数,并且第二个参数是函数的话,将会传递给enhancer if ( typeof preloadedState === 'function' && typeof

[译]掌握 JavaScript 面试:什么是函数式编程

坚强是说给别人听的谎言 提交于 2020-04-19 22:46:46
原文地址: Master the JavaScript Interview: What is Functional Programming? 原文作者: Eric Elliott 译文出自: 掘金翻译计划 本文永久链接: github.com/xitu/gold-m… 译者: zoomdong 校对者: Roc , Long Xiong 掌握 JavaScript 面试:什么是函数式编程 “掌握 JavaScript 面试” 是一系列的帖子,为了帮助求职者在面试中高级 JavaScript 职位时可能遇见的常见问题做准备。这些是我在真实面试场景中经常会问到的一些问题。 函数式编程已经成为 JavaScript 领域中一个非常热门的话题。就在几年前,甚至很少有 JavaScript 程序员知道什么是函数式编程,但是我在过去 3 年看到的每个大型应用程序代码库中都大量使用了函数式编程思想。 函数式编程 (通常缩写为 FP)是通过组合 纯函数 ,避免 状态共享 、 可变数据 和 副作用 来构建软件的过程。函数式编程是 声明式 的,而不是 命令式 的,应用程序状态通过纯函数流动。与面向对象编程不同,在面向对象编程中,应用程序状态通常与对象中的方法共享和协作。 函数式编程是一种 编程范式 ,这意味着它是一种基于一些基本的、定义性的原则(如上所列)来思考软件构建的方法