mobx

Recoil

怎甘沉沦 提交于 2020-07-28 20:14:51
说到状态管理器,轮子满天飞。在 Class 时代,redux 与 mobx 几乎占据了全部市场,几乎没有没用过 redux 的同学。随着 Hooks 的诞生,新的一批轮子应运而生,其中有代表性的有 unstated-next、constate 等等。 当然无论什么轮子,要解决的问题都是一样的:**跨组件状态共享。**在解决这个核心问题的同时,需要尽可能的满足以下几个特性: TypeScript 支持 友好的异步支持 支持状态互相依赖 同时支持 Class 与 Hooks 组件 使用简单 Recoil 体验 最近,facebook 官方出了一个状态管理器解决方案 Recoil ,我们来体验一下。 准备工作 使用 Recoil,我们需要在项目最外层包一个 RecoilRoot ,这个和大部分状态管理器一致,通过 context 来跨组件传递数据。 import React from 'react'; import { RecoilRoot } from 'recoil'; function App() { return ( <RecoilRoot> ... </RecoilRoot> ); } 复制代码 跨组件状态共享 状态最简单的就是定义和使用。在 Recoil 中,通过 atom 来定义一个状态。 const inputValueState = atom({ key:

React Native 一站式开发解决方案

时光总嘲笑我的痴心妄想 提交于 2020-07-28 03:31:34
分享一个RN快速开发库: react-native-easy-app 。一款为React Native App开发提供基础服务的纯JS库( 支持 IOS & Android ),可以为开发者开发项目提供强有力的支持,可以大幅度提高编码的效率,特别是在项目搭建初期,至少可以为开发者减少30%的工作量。 由于前面的文章已经做过介绍,在这里就不详细介绍了,通过本开源库,你可以有以下“高级的操作”: 可以像访问内存对象一样访问AsyncStorage 相关文章: 一分钟实现,一个RN持久数据管理器 ; react-native-easy-app 详解与使用之(一) AsyncStorage 只需要几十行代码就能实现,一个完整的app与服务器的Http请求交互 相关文章: 二十分钟封装,一个App前后台Http交互的实现 ; react-native-easy-app 详解与使用之(二) fetch 一行配置 + 基础组件的使用就即可以实现,UI自动屏幕适配 相关文章: 详解与使用之(三) View,Text,Image,Flatlist ; react-native-easy-app 详解与使用之(四)屏幕适配 另附有多个不同版本的Demo供大家参考用法: Sample Sample_Mobx Sample_Redux 以下为Sample_Redux示例程序的UI部分截图:

前端三大主流框架React、Vue、Angular的对比

痞子三分冷 提交于 2020-07-26 23:39:42
前言 每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式。 一、Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西: 必须使用它的模块机制 必须使用它的依赖注入 必须使用它的特殊形式定义组件(这一点每个视图框架都有,难以避免) 所以Angular是带有比较强的排它性的,如果你的应用不是从头开始,而是要不断考虑是否跟其他东西集成,这些主张会带来一些困扰。 二、React 它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。你当然可以只用React的视图层,但几乎没有人这么用,为什么呢,因为你用了它,就会觉得其他东西都很别扭,于是你要引入Flux,Redux,Mobx之中的一个,于是你除了Redux,还要看saga,于是你要纠结业务开发过程中每个东西有没有副作用,纯不纯,甚至你连这个都可能不能忍: const getData = () => { // 如果不存在,就在缓存中创建一个并返回 // 如果存在,就从缓存中拿 } 因为你要纠结它有外部依赖,同样是不加参数调用,连续两次的结果是不一样的,于是不纯。为什么我一直不认同在中后台项目中使用React

Ant-Design Table not rendering when change state in mobx store

谁说我不能喝 提交于 2020-06-17 15:52:18
问题 I program the behavior of clicking on a row in the ant design Table component. This should change the rowClassName on the Table. Here is an example on CodeSendBox. When you click on a table row, the value in the Store.selectedRowKey changes, but the table is not re rendering. If you move the dividing slider to the sandbox and the table size changes, then rendering occurs and a new row selection is applied 回答1: Basically you don't use selectedRowKey inside your observer component, so that's

Ant-Design Table not rendering when change state in mobx store

坚强是说给别人听的谎言 提交于 2020-06-17 15:51:35
问题 I program the behavior of clicking on a row in the ant design Table component. This should change the rowClassName on the Table. Here is an example on CodeSendBox. When you click on a table row, the value in the Store.selectedRowKey changes, but the table is not re rendering. If you move the dividing slider to the sandbox and the table size changes, then rendering occurs and a new row selection is applied 回答1: Basically you don't use selectedRowKey inside your observer component, so that's

Ant-Design Table not rendering when change state in mobx store

半腔热情 提交于 2020-06-17 15:51:17
问题 I program the behavior of clicking on a row in the ant design Table component. This should change the rowClassName on the Table. Here is an example on CodeSendBox. When you click on a table row, the value in the Store.selectedRowKey changes, but the table is not re rendering. If you move the dividing slider to the sandbox and the table size changes, then rendering occurs and a new row selection is applied 回答1: Basically you don't use selectedRowKey inside your observer component, so that's

React Typescript: Argument of type '{ [x: number]: any; }' is not assignable to parameter of type

喜你入骨 提交于 2020-06-01 05:20:27
问题 I added onChange method in my project(React, TS, Mobx), but I am getting an error: Argument of type '{ [x: number]: any; }' is not assignable to parameter of type I am new to TypeScript and not sure why it's happening. What can be the problem? (parameter) event: { target: { name: any; value: any; }; } Argument of type '{ [x: number]: any; }' is not assignable to parameter of type 'IAddPlayerFormState | ((prevState: Readonly, props: Readonly) => IAddPlayerFormState | Pick | null) | Pick<...> |

How to determine when mobx computed variable is called.?

倾然丶 夕夏残阳落幕 提交于 2020-05-28 04:45:26
问题 I have been playing with mobx computed, but I am having trouble understanding what is happening with the following code: import React, { Component } from "react"; import { render } from "react-dom"; import { observable, computed } from "mobx"; import { observer } from "mobx-react"; @observer class Counter extends Component { @observable count = 0; @observable secondCount = 0; @computed get countString() { console.log("countString Computed"); return `${this.count} ${this.secondCount}`; }

21 届前端暑期实习 BAT 面试之路,已上岸阿里(万字长文)

孤街浪徒 提交于 2020-04-23 10:10:22
笔者就读于杭州师范大学(世界上最好的大学),感谢在这里的三年,遇到的同学和导师! 笔者在大二开始自学 Web 开发,大二上学期做的 Java 后端,大二下学期转前端,和导师做了两个商业项目。 从今年二月初准备简历,开始复习整理知识点,投递了 字节 、 腾讯 、 阿里 、 百度 ,经历大大小小的面试,最终到 4 月 17 日 接到阿里盒马意向书已经两个半月了,期间也经历过 burnout 的阶段,不过结果还是好的,现在希望通过这一篇文章,将大学里最重要的这两个月总结一下,也给大家做一些原创的、有用的、不一样的分享。 截止至发稿,目前 字节抖音挂 腾讯 PCG 口头 offer,后来接了阿里就没接腾讯 阿里盒马已上岸 百度等 HR 中… 面经 我会按照首次(一面)开始的顺序来写,腾讯 PCG,字节抖音,阿里投递的 BU 比较多,最后是百度统招(部门未知)。 为什么是这个顺序?因为我的春招,准备和投简历是同时开始的,也就是说我刚开始是比较薄弱的,知识点没复习,面试经验不够,这些都是一边面试一边总结出来的。 蚂蚁金服两轮(直通终面) 一面(电话 1h10min) 二月中旬面试,当时还是个小菜鸟,面试官很 nice,一直鼓励我,说我的项目经历丰富,愿意多挖掘我一点。我当时怕是对“挖掘”二字有什么误解,竟然还开开心心说了个“好哒”。后面对于当时还是菜鸟的我简直就是炼狱难度。 自我介绍 输入

为了弄懂Flutter的状态管理, 我用10种方法改造了counter app

江枫思渺然 提交于 2020-03-23 18:47:32
3 月,跳不动了?>>> 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: https://github.com/mengdd/counter_state_management 切换分支对应不同的实现方式. Contents Flutter中的状态管理 状态分类 状态管理方法概述 Counter sample默认实现: StatefulWidget InheritedWidget Scoped Model Provider BLoC BLoC手动实现 BLoC + InheritedWidget做传递 BLoC rxdart实现 BLoC用库实现 rxdart Redux MobX Flutter Hooks Demo说明及感想 Flutter State Management Flutter是描述性的(declarative), UI反映状态. UI = f(state) 其中 f 代表了build方法. 状态的改变会直接触发UI的重新绘制. UI reacts to the changes. 相对的, Android, iOS等都是命令式的(imperative), 会有 setText() 之类的方法来改变UI. 状态分类