Skip to content

Releases: foca-js/foca

v3.2.0

19 Oct 16:27
Compare
Choose a tag to compare

增加局部模型钩子 useIsolate

v3.1.1...v3.2.0

v3.1.1

14 Oct 15:45
Compare
Choose a tag to compare
  • computed内使用数组状态数据时,更新数组不会触发重新计算
  • 删除无用类型 ComputedRef

v3.1.0...v3.1.1

v3.1.0

10 Oct 14:54
Compare
Choose a tag to compare

持久化引擎支持同步引擎。因此可以直接使用浏览器内置的 localStorage 和 sessionStorage 接口

v3.0.0...v3.1.0

v3.0.0

08 Oct 13:27
Compare
Choose a tag to compare

破坏性更新

  • 删除hooks函数 useDefined
  • 删除模型内onDestroy事件钩子
  • 删除持久化maxAge配置
store.init({
  persist: [
    {
      key: 'key',
-     maxAge: 3600,
      engines: engines.localStorage,
      models: [],
    }
  ]
})
  • 非hooks状态下计算属性使用执行函数的方式获取
const model = defineModel('model', {
  initialState: { firstName: '', lastName: '' },
  methods: {
    myMethod() {
-     return this.fullName.value;
+     return this.fullName();
    }
  },
  computed: {
   fullName() {
     return this.state.firstName + this.state.lastName;
   },
  }
});

新特性

  • 开启持久化的模型会立即存储initialState
  • 计算属性支持传递参数
const model = defineModel('model', {
  initialState: { firstName: '', lastName: '' },
  methods: {
    myMethod() {
+     const profile = this.profile(30, 'addr', false);
    }
  },
  computed: {
   fullName() {
     return this.state.firstName + this.state.lastName;
   },
+  profile(age: number, address: string, coding: boolean = true) {
+    return this.fullName() + '-' + age + address + coding;
+  },
  }
});

const App: FC = () => {
  const fullName = useComputed(model.fullName);
+ const profile = useComputed(model.profile, 20, 'my-address');
}
  • 持久化增加 dumpload 两个系列化函数
const model = defineModel('model', {
  initialState: { firstName: 'tick', lastName: 'tock' },
  persist: {
+   dump(state) {
+     return state.firstName;
+   },
+   load(dumpData) {
+     return { ...this.initialState, firstName: dumpData };
+   },
  }
});
  • 持久化新增合并模式 replace, merge(默认), deep-merge
store.init({
  persist: [
    {
      key: 'item1',
      version: '1.0',
+     merge: 'replace',
      engine: engines.localStorage,
      models: [],
    },
  ]
})

其它

  • npm包转译为ES5语法以兼容更早的浏览器 (#41)
  • immer版本降级:10.0.2 -> 9.0.21
  • react-redux版本升级:8.1.2 -> 8.1.3

v2.0.1...v3.0.0

v2.0.1

10 Aug 14:33
Compare
Choose a tag to compare
  • react-redux 版本从 8.1.1 升级到 8.1.2 (#40)

v2.0.0...v2.0.1

v2.0.0

26 Jun 14:09
Compare
Choose a tag to compare
  • 不再兼容 IE 浏览器
  • 最小 React 版本为 18
  • 最小 TypeScript 版本为 5.0
  • immer 版本从 9.0.21 升级到 10.0.2
  • react-redux 版本从 8.0.5 升级到 8.1.1
  • 删除废弃字段 actionseffects

v1.3.1...v2.0.0

v1.3.1

14 Apr 00:40
Compare
Choose a tag to compare
  • 在 onInit 事件内执行的 async method 未储存 loading 状态 (#38)
  • immer 版本从 9.0.16 升级到 9.0.21
  • redux 版本从 4.2.0 升级到 4.2.1
  • 支持 typescript@5

v1.3.0...v1.3.1

v1.3.0

17 Dec 07:42
Compare
Choose a tag to compare

日志

  • setState 的回调模式支持返回不完整数据
defineModel('unique_name', {
  initialState: { a: 'a', b: 'b' },
  methods: {
    test() {
      this.setState(() => {
        return { a: 'xxx' };
      });
      console.log(this.state); // { a: 'xxx', b: 'b' }
    },
  },
});
  • 传给 reducer 的 initialState 不再执行深拷贝,而是在开发环境下进行冻结处理以防开发者错误操作
const initialState = { a: 'a', b: 'b' };

defineModel('unique_name', {
  initialState: initialState,
});

// 修改失败,严格模式下会报错
// TypeError: Cannot assign to read only property 'a' of object '#<Object>'
initialState.a = 'xxx';

提交

v1.2.1...v1.3.0

v1.2.1

11 Nov 08:33
Compare
Choose a tag to compare

日志

  • 销毁模型时可能触发onChange勾子

提交

v1.2.0...v1.2.1

v1.2.0

10 Nov 08:28
Compare
Choose a tag to compare

日志

  • 重命名 actions 为 reducers (#29)
  • 重命名 effects 为 methods (#29)
  • exports 导出 package.json 文件
  • 不再支持[email protected]

提交

v1.1.0...v1.2.0