Skip to content

Commit 9f39360

Browse files
author
wangyi
committed
## v4.5.4 2022-05-25
* [revert] rollback to 4.3.1
1 parent e2a6152 commit 9f39360

File tree

4 files changed

+39
-62
lines changed

4 files changed

+39
-62
lines changed

docs/changes.md

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,11 @@
9494

9595
* [design] add the param defaultModel for API [useModel](/api?id=usemodel)
9696

97-
## v4.5.0 2022-05-23
97+
## ~~v4.5.0 to v4.5.3~~
9898

99-
* [update] use [email protected] auto connect feature. And resolve the problem about `weakSharing` switch between two Components can not lead reset.
99+
* [deprecated] These versions are not reasonable for trying to make switch of several components with same `weakSharing` model synchronously. The react effects always work by a global updating, not only work for a special component. Consider that, we make a decision to rollback to `4.3.1`.
100100

101-
## v4.5.1 2022-05-23
101+
## v4.5.4 2022-05-25
102102

103-
* [optimize] use the feature of agent-reducer connecting update.
104-
105-
## v4.5.2 2022-05-24
106-
107-
* [bug] resolve the problem about switch `weakSharing` usages, the cache is still remains.
108-
109-
## v4.5.3 2022-05-24
110-
111-
* [update] update version with `agent-reducer`.
103+
* [revert] rollback to 4.3.1
112104

docs/zh/changes.md

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,10 @@
9494

9595
* [新增] 为 API [useModel](/zh/api?id=usemodel) 添加第二个参数 defaultModel。
9696

97-
## v4.5.0 2022-05-23
97+
## ~~v4.5.0 to v4.5.3~~
9898

99-
* [update] 使用 [email protected] auto connect 特性。并修复使用同一 `weakSharing` 弱共享组件,互切时,无法清理模型状态的问题
99+
* [deprecated] 这些版本考虑了 effect 的运行时机,这是非常不合理的,react effect 并非生命周期。每个 effect 都是对一次全量更新做出的反应,是单个组件对一次全量更新副作用的汇总项,而非针对单个组件。为此,我们决定维持 4.3.1 以及之前版本的正确理解方案,做出回滚操作。
100100

101-
## v4.5.1 2022-05-23
101+
## v4.5.4 2022-05-25
102102

103-
* [optimize] 使用 agent-reducer 自动 connect 同步更新功能
104-
105-
## v4.5.2 2022-05-24
106-
107-
* [bug] 修复切换 `weakSharing` 共享组件时,state 依然留存的问题。
108-
109-
## v4.5.3 2022-05-24
110-
111-
* [update] 跟随 `agent-reducer` 版本。
103+
* [revert] 回滚至 4.3.1

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "use-agent-reducer",
3-
"version": "4.5.3",
3+
"version": "4.5.4",
44
"main": "dist/use-agent-reducer.mini.js",
55
"module": "esm/use-agent-reducer.js",
66
"typings": "index.d.ts",
@@ -43,7 +43,7 @@
4343
"peerDependencies": {
4444
"react": ">=16.8.0",
4545
"react-dom": ">=16.8.0",
46-
"agent-reducer": ">=4.5.3"
46+
"agent-reducer": ">=4.5.4"
4747
},
4848
"devDependencies": {
4949
"@babel/cli": "^7.13.16",
@@ -88,7 +88,7 @@
8888
"react": "^16.8.0",
8989
"react-dom": "^16.8.0",
9090
"react-test-renderer": "^16.7.0",
91-
"agent-reducer": "4.5.3",
91+
"agent-reducer": "4.5.4",
9292
"ts-jest": "^24.0.2",
9393
"ts-loader": "^6.0.4",
9494
"tsconfig-paths-webpack-plugin": "^3.2.0",

src/index.ts

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ import React, {
33
memo, NamedExoticComponent, ReactNode,
44
useContext,
55
useEffect,
6-
useLayoutEffect,
76
useMemo,
87
useReducer,
9-
useRef, useState,
8+
useRef,
109
} from 'react';
1110
import {
1211
create,
@@ -15,6 +14,7 @@ import {
1514
LifecycleMiddleWare,
1615
Action,
1716
AgentReducer,
17+
DefaultActionType,
1818
Model,
1919
weakSharing,
2020
Factory,
@@ -31,34 +31,34 @@ export function useAgentReducer<T extends Model<S>, S>(
3131
entry: T | { new(): T },
3232
...mdws: MiddleWare[]
3333
): T {
34-
const [version, setVersion] = useState(0);
3534
const reducerRef = useRef<null | AgentReducer<S, T>>(null);
3635

3736
const initialed = reducerRef.current !== null;
3837

3938
if (!initialed) {
40-
const reducerFn = create<S, T>(entry, ...mdws);
41-
reducerRef.current = reducerFn;
42-
reducerFn.recreate(() => {
43-
reducerFn.disconnect();
44-
reducerRef.current = null;
45-
setVersion((v) => v + 1);
46-
});
39+
reducerRef.current = create(entry, ...mdws);
4740
}
4841

4942
const reducer = reducerRef.current as Reducer<S, Action>&ReducerPadding<S, T>;
5043

51-
const [, dispatch] = useReducer(reducer, reducer.agent.state);
44+
const [state, dispatch] = useReducer(reducer, reducer.agent.state);
5245

5346
const dispatcher = (action:Action) => {
5447
dispatch({ ...action, state: reducer.agent.state });
5548
};
5649

57-
useLayoutEffect(
50+
if (!initialed) {
51+
reducer.connect(dispatcher);
52+
}
53+
54+
useEffect(
5855
() => {
5956
if (reducer) {
6057
reducer.connect(dispatcher);
6158
}
59+
if (reducer.agent.state !== state) {
60+
dispatcher({ type: DefaultActionType.DX_MUTE_STATE, state: reducer.agent.state });
61+
}
6262
return () => {
6363
const { current: red } = reducerRef;
6464
if (!red) {
@@ -67,7 +67,7 @@ export function useAgentReducer<T extends Model<S>, S>(
6767
red.disconnect();
6868
};
6969
},
70-
[version],
70+
[],
7171
);
7272

7373
return reducer.agent;
@@ -86,20 +86,12 @@ export function useAgentSelector<T extends Model<S>, S, R>(
8686
mapStateCallback: (state: T['state']) => R,
8787
equalityFn?: (prev: R, current: R) => boolean,
8888
): R {
89-
const [version, setVersion] = useState(0);
90-
9189
const reducerRef = useRef<null | AgentReducer<S, T>>(null);
9290

9391
const initialed = reducerRef.current !== null;
9492

9593
if (!initialed) {
96-
const reducerFn = create<S, T>(entry);
97-
reducerRef.current = reducerFn;
98-
reducerFn.recreate(() => {
99-
reducerFn.disconnect();
100-
reducerRef.current = null;
101-
setVersion((v) => v + 1);
102-
});
94+
reducerRef.current = create(entry);
10395
}
10496

10597
const reducer = reducerRef.current as Reducer<S, Action>&ReducerPadding<S, T>;
@@ -125,11 +117,16 @@ export function useAgentSelector<T extends Model<S>, S, R>(
125117
dispatchRef.current(action);
126118
};
127119

128-
useLayoutEffect(
120+
if (!initialed) {
121+
reducer.connect(dispatchWrap);
122+
}
123+
124+
useEffect(
129125
() => {
130126
if (reducer) {
131127
reducer.connect(dispatchWrap);
132128
}
129+
dispatchRef.current({ type: DefaultActionType.DX_MUTE_STATE, state: reducer.agent.state });
133130
return () => {
134131
const { current: red } = reducerRef;
135132
if (!red) {
@@ -138,7 +135,7 @@ export function useAgentSelector<T extends Model<S>, S, R>(
138135
red.disconnect();
139136
};
140137
},
141-
[version],
138+
[],
142139
);
143140

144141
return current;
@@ -148,25 +145,21 @@ export function useAgentMethods<T extends Model<S>, S>(
148145
entry: T,
149146
...middleWares: MiddleWare[]
150147
): Omit<T, 'state'> {
151-
const [version, setVersion] = useState(0);
152-
153148
const reducerRef = useRef<null | AgentReducer<S, T>>(null);
154149

155150
const initialed = reducerRef.current !== null;
156151

157152
if (!initialed) {
158-
const reducerFn = create<S, T>(entry, ...middleWares);
159-
reducerRef.current = reducerFn;
160-
reducerFn.recreate(() => {
161-
reducerFn.disconnect();
162-
reducerRef.current = null;
163-
setVersion((v) => v + 1);
164-
});
153+
reducerRef.current = create(entry, ...middleWares);
165154
}
166155

167156
const reducer = reducerRef.current as Reducer<S, Action>&ReducerPadding<S, T>;
168157

169-
useLayoutEffect(
158+
if (!initialed) {
159+
reducer.connect();
160+
}
161+
162+
useEffect(
170163
() => {
171164
if (reducer) {
172165
reducer.connect();
@@ -179,7 +172,7 @@ export function useAgentMethods<T extends Model<S>, S>(
179172
red.disconnect();
180173
};
181174
},
182-
[version],
175+
[],
183176
);
184177

185178
return reducer.agent;

0 commit comments

Comments
 (0)