记前端状态管理库Akita中的一个坑
记状态管理库Akita中的一个坑
Akita是什么
Akita是一种基于RxJS的状态管理模式,它采用Flux中的多个数据存储和Redux中的不可变更新的思想,以及流数据的概念,来创建可观察的数据存储模型。 无论是Angular、React、Vue、Web组件,还是普通的旧式JS,秋田都可以完成繁重的工作,并作为维护干净、无样板、可伸缩的应用程序的有用工具。
Akita基于面向对象的设计原则,而不是函数式编程,因此具有OOP经验的开发人员应该感到很熟悉。它您的团队提供了一个不可偏离的固定模式。
注意一个坑
在创建Entity Store时根据需求您可能需要在@StoreConfig()装饰器中配置Entity Store 的id属性
直接上代码
一段ts代码
import { Todo } from './todo.model';
import { EntityState, EntityStore, StoreConfig } from '@datorama/akita';
export interface TodosState extends EntityState<Todo> { }
// fixme 注意这里
@StoreConfig({ name: 'todos' })
export class TodosStore extends EntityStore<TodosState, Todo> {
constructor() {
super();
}
}
这是一段官方的demo,但是其中有个坑。 若您Entity Store中的实体类型中唯一标识不为
id,则需要自己手动设置 Akita @StoreConfig 会默认绑定您实体类型中的id属性作为唯一标识,若 不绑定唯一标识且@StoreConfig又找不到id属性则EntityStore在调用 set存储数据时会出错(但是不会报错。。。。。天坑,不知道时有意为之还是bug)
若唯一标识Entity Id不为id则写为下面这种形式
一段ts代码:
import { Todo } from './todo.model';
import { EntityState, EntityStore, StoreConfig } from '@datorama/akita';
export interface TodosState extends EntityState<Todo> { }
// fixme 注意这里,修改后为
@StoreConfig({ name: 'todos',idKey: yourId })
export class TodosStore extends EntityStore<TodosState, Todo> {
constructor() {
super();
}
}
吐槽一下: 还有就是官网在文档关于这个需要特别注意 事项这个唯一标识绑定的介绍是在创建Entity Store之后的...(坑死欧啦)
记前端状态管理库Akita中的一个坑的更多相关文章
- 网页前端状态管理库Redux学习笔记(一)
最近在博客园上看到关于redux的博文,于是去了解了一下. 这个Js库的思路还是很好的,禁止随意修改状态,只能通过触发事件来修改.中文文档在这里. 前面都很顺利,但是看到异步章节,感觉关于异步说得很乱 ...
- React 新 Context API 在前端状态管理的实践
本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redux来帮助我们进行管理,然而随着Re ...
- vue组件化开发-vuex状态管理库
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...
- 比Redux更容易上手的状态管理库
前言 当项目越发复杂时,我们发现仅仅是提升状态已经无法适应如此复杂的状态管理了,程序状态变得比较难同步,操作,到处是回调,发布,订阅,这意味着我们需要更好的状态管理方式,于是就引入了状态管理库,如Re ...
- 轻量级状态管理库Pinia试吃
最近连续看了几个GitHub上的开源项目,里面都用到了 Pinia 这个状态管理库,于是研究了一下,发现确实是个好东西!那么,Pinia 的特点: 轻量化 -- Pinia 体积约1KB,十分轻巧 ...
- andriod8.1.0源码编译中的一个坑-package com.sun.javadoc does not exist
这里记录编译过程中的一个坑!!! 编译过程中出现了下面的报错 external/doclava/src/com/google/doclava/ClassInfo.java:20: error: pac ...
- xcode中得一个坑
因项目需求变动,我必须在coredata中的WorkLogModel表中添加一个字段:抄送人.起初我给这个字段起名为copyPerson,一切准备就绪后,发现从数据库读取这个copyPerson时,第 ...
- PHP中的一个”坑“
说一个极有可能在工作中遇到的问题——foreach的引用 foreach $arr = range(1,3); //[1,2,3] foreach($arr as &$val) { } for ...
- Spring Boot 计划任务中的一个“坑”
计划任务功能在应用程序及其常见,使用Spring Boot的@Scheduled 注解可以很方便的定义一个计划任务.然而在实际开发过程当中还应该注意它的计划任务默认是放在容量为1个线程的线程池中执行, ...
随机推荐
- Python数据分析与展示[第三周](pandas数据类型操作)
数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...
- php-imagick扩展
介绍 magick 是用 ImageMagic API 来创建和修改图像的PHP官方扩展.ImageMagick® 是用来创建,编辑,合并位图图像的一套组件. 它能够用于读取,转换,写入多种不同格式的 ...
- Mybatis自查询递归查找子菜单
之前写过 java从数据库读取菜单,递归生成菜单树 今天才发现mybatis也可以递归查询子菜单 先看一下数据库 主键id,名称name,父id,和url 设计菜单类 public class Men ...
- Intellij IDEA设置忽略部分类编译错误
有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是无法通过编译的,因此也就无法部署运行,要达到正确运行项目的目的需要作一些设置才行. 设置Inte ...
- Codeforces 425A
点击打开题目链接 这题想了将近一天..越发觉得自己太弱(不过早已经习惯这样的自己了 :P)不过因为是自己独立想出来的,还是很高兴. 拿到题目,当看到数据量的时候,就感觉很明显的暴力. n×n×n×k也 ...
- Mac如何通过终端开启/关闭SSH?Mac新手教程
Mac如何通过终端开启/关闭SSH?Mac新手教程 SSH(Secure Shell)是一种通用的.功能强大的.基于软件的网络安全解决方案.计算机每次向网络发送数据时,SSH都会自动对其进行加密. ...
- 杨柳目-杨柳科-Info-新闻:杨柳絮造成的危害相关视频资讯
ylbtech-杨柳目-杨柳科-Info-新闻:杨柳絮造成的危害相关视频资讯 1. 杨絮返回顶部 1. 2. https://www.baidu.com/sf/vsearch?pd=video&a ...
- hdu2018 dp
/* 1~4直接取得: 然后后面的生牛的时候都是前一年的加上一定的数. 从第5年看,第五年出生的牛肯定要加上第四年出生的,然后由于第一个出生的牛开始生小牛,这和 最开始的牛生孩子是一样的,所以+dp[ ...
- html5之div,article,section区别与应用
div 块级元素,在里面的内容会自动开始新行,可以定义文档中的分区或节,把文档分割成独立,不同的部分 本身没有什么语义,更适合帮助布局,进行样式化. <div> </div> ...
- 2019-8-31-C#-通过-probing-指定-dll-寻找文件夹
title author date CreateTime categories C# 通过 probing 指定 dll 寻找文件夹 lindexi 2019-08-31 16:55:58 +0800 ...