Skip to content

Commit

Permalink
docs: remove api.md
Browse files Browse the repository at this point in the history
  • Loading branch information
geekact committed Oct 9, 2023
1 parent 28c3cf9 commit 98d1c17
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 41 deletions.
7 changes: 3 additions & 4 deletions docs/_sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@

- [进阶用法](/advanced.md)

* [API一览](/api.md)

- [问题解答](/troubleshooting.md)
* [问题解答](/troubleshooting.md)

* [编写测试](/test.md)
- [编写测试](/test.md)

- [捐赠](/donate.md)
* [捐赠](/donate.md)
11 changes: 0 additions & 11 deletions docs/api.md

This file was deleted.

4 changes: 4 additions & 0 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
padding-bottom: 2px;
}

img.emoji {
vertical-align: text-top;
}

@media screen and (max-width: 1000px) {
.markdown-section {
max-width: 93%;
Expand Down
36 changes: 10 additions & 26 deletions docs/model.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,24 @@ export const userModel = defineModel('users', {
});
```

你已经定义了一个简单的可用的模型,通过 **export** 关键字,你已经可以在 react 组件中导入并使用它了
你已`defineModel`经定义了一个最基础的模型,其中第一个字符串参数为redux中的`唯一标识`,请确保其它模型不会再使用这个名字

!> foca 会自动把模型注册到 store 中心,这就是你能在组件中直接导入使用的秘密
对了,怎么注册到store?躺着别动!foca 已经自动把模型注册到 store 中心,也让你享受一下 **DRY** <small>(Don't Repeat Yourself)</small> 原则,因此在业务文件内直接导入模型就能使用

# State

foca 基于 redux 深度定制,所以 state 必须是个纯对象或者数组。

```typescript
// 1
cosnt initialState: { [K: string]: string } = {};
defineModel('model-object', {
// 对象
const initialState: { [K: string]: string } = {};
const objModel = defineModel('model-object', {
initialState,
});

// 2
cosnt initialState: number[] = [];
defineModel('model-array', {
// 数组
const initialState: number[] = [];
const arrayModel = defineModel('model-array', {
initialState,
});
```
Expand Down Expand Up @@ -69,6 +69,7 @@ export const userModel = defineModel('users', {
}
},
clear() {
// 返回初始值
return this.initialState;
},
},
Expand Down Expand Up @@ -155,6 +156,7 @@ this.setState((state) => {
return ['a', 'b', 'c'];
});

// 重新设置成初始值
this.setState(this.initialState);
```

Expand Down Expand Up @@ -233,21 +235,3 @@ userModel.profile(123); // 实例2缓存
缓存什么时候才会更新?框架自动收集依赖,只有其中某个依赖更新了,计算属性才会更新。上面的例子中,当`firstName`或者`lastName`有变化时,fullName 将被标记为`dirty`状态,下一次访问则会重新计算结果。而当`country`变化时,不影响 fullName 的结果,下一次访问仍使用缓存作为结果。

!> 可以在 computed 中使用其它 model 的数据。

# 通用属性

## name

模型的名称,也是 reducer 的名称,通过`model.name`获取。每个模型的名称必须是**唯一的**字符串,否则会出现数据被覆盖的情况。

## state

模型的实时状态,通过`model.state`获取。你可以在任何地方使用,没有限制。但如果你想在组件里动态更新数据,就得配合 hooks 和 connect 了。

## loading

模型异步函数的当前状态,通过`getLoading(model.asyncXXX)`获取。

## initialState

只有在 reducers 和 methods 方法内部才能使用。通过`this.initialState`获取。
18 changes: 18 additions & 0 deletions docs/react.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

# useModel

使用频率::star2::star2::star2::star2::star2:

你绝对想不到在 React 组件中获取一个模型的数据有多简单,试试:

```tsx
Expand Down Expand Up @@ -64,6 +66,8 @@ const count = useModel(

# useLoading

使用频率::star2::star2::star2::star2::star2:

methods 函数大部分是异步的,你可能正在函数里执行一个请求 api 的操作。在用户等待期间,你需要为用户渲染`loading...`之类的字样或者图标以缓解用户的焦虑心情。利用 foca 提供的逻辑,你可以轻松地知道某个函数是否正在执行:

```tsx
Expand Down Expand Up @@ -92,6 +96,8 @@ const loading = useLoading(userModel.create, userModel.update, ...);

# useComputed

使用频率::star2::star2::star2:

配合 computed 计算属性使用。

```tsx
Expand Down Expand Up @@ -123,8 +129,20 @@ const App: FC = () => {
};
```

# getLoading

使用频率::star2:

如果想实时获取异步函数的执行状态,则可以通过 `getLoading(...)` 的方式获取。它与 **useLoading** 的唯一区别就是是否hooks。

```typescript
const loading = getLoading(userModel.create);
```

# connect

使用频率::star2:

如果你写烦了函数式组件,偶尔想写一下 class 组件,那么 foca 已经为你准备好了`connect()`函数。如果不知道这是什么,可以参考[react-redux](https://github.com/reduxjs/react-redux)的文档。事实上,我们内置了这个库并对其做了一些封装。

```typescript
Expand Down

0 comments on commit 98d1c17

Please sign in to comment.