Skip to content

Commit 678a4f9

Browse files
author
wangyi
committed
## v4.5.2 2022-05-24
* [bug] resolve the problem about switch `weakSharing` usages, the cache is still remains.
1 parent ab9dd41 commit 678a4f9

File tree

5 files changed

+44
-14
lines changed

5 files changed

+44
-14
lines changed

docs/changes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,7 @@
101101
## v4.5.1 2022-05-23
102102

103103
* [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.

docs/zh/changes.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,8 @@
100100

101101
## v4.5.1 2022-05-23
102102

103-
* [optimize] 使用 agent-reducer 自动 connect 同步更新功能
103+
* [optimize] 使用 agent-reducer 自动 connect 同步更新功能
104+
105+
## v4.5.2 2022-05-24
106+
107+
* [bug] 修复切换 `weakSharing` 共享组件时,state 依然留存的问题。

example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
"@types/classnames": "^2.2.7",
1414
"@types/react": "16.14.21",
1515
"@types/react-dom": "16.9.14",
16-
"agent-reducer": "4.5.0",
16+
"agent-reducer": "4.5.3",
1717
"antd": "^4.16.13",
1818
"babel-polyfill": "^6.26.0",
1919
"classnames": "^2.2.6",
2020
"moment": "^2.24.0",
2121
"react": "^16.8.6",
2222
"react-dom": "^16.8.6",
23-
"use-agent-reducer": "4.2.0"
23+
"use-agent-reducer": "4.5.1"
2424
},
2525
"devDependencies": {
2626
"@babel/core": "7.15.8",

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.1",
3+
"version": "4.5.2",
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.0"
46+
"agent-reducer": ">=4.5.3"
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.0",
91+
"agent-reducer": "4.5.3",
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: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import React, {
66
useLayoutEffect,
77
useMemo,
88
useReducer,
9-
useRef,
9+
useRef, useState,
1010
} from 'react';
1111
import {
1212
create,
@@ -15,7 +15,6 @@ import {
1515
LifecycleMiddleWare,
1616
Action,
1717
AgentReducer,
18-
DefaultActionType,
1918
Model,
2019
weakSharing,
2120
Factory,
@@ -32,12 +31,19 @@ export function useAgentReducer<T extends Model<S>, S>(
3231
entry: T | { new(): T },
3332
...mdws: MiddleWare[]
3433
): T {
34+
const [version, setVersion] = useState(0);
3535
const reducerRef = useRef<null | AgentReducer<S, T>>(null);
3636

3737
const initialed = reducerRef.current !== null;
3838

3939
if (!initialed) {
40-
reducerRef.current = create(entry, ...mdws);
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+
});
4147
}
4248

4349
const reducer = reducerRef.current as Reducer<S, Action>&ReducerPadding<S, T>;
@@ -61,7 +67,7 @@ export function useAgentReducer<T extends Model<S>, S>(
6167
red.disconnect();
6268
};
6369
},
64-
[],
70+
[version],
6571
);
6672

6773
return reducer.agent;
@@ -80,12 +86,20 @@ export function useAgentSelector<T extends Model<S>, S, R>(
8086
mapStateCallback: (state: T['state']) => R,
8187
equalityFn?: (prev: R, current: R) => boolean,
8288
): R {
89+
const [version, setVersion] = useState(0);
90+
8391
const reducerRef = useRef<null | AgentReducer<S, T>>(null);
8492

8593
const initialed = reducerRef.current !== null;
8694

8795
if (!initialed) {
88-
reducerRef.current = create(entry);
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+
});
89103
}
90104

91105
const reducer = reducerRef.current as Reducer<S, Action>&ReducerPadding<S, T>;
@@ -124,7 +138,7 @@ export function useAgentSelector<T extends Model<S>, S, R>(
124138
red.disconnect();
125139
};
126140
},
127-
[],
141+
[version],
128142
);
129143

130144
return current;
@@ -134,12 +148,20 @@ export function useAgentMethods<T extends Model<S>, S>(
134148
entry: T,
135149
...middleWares: MiddleWare[]
136150
): Omit<T, 'state'> {
151+
const [version, setVersion] = useState(0);
152+
137153
const reducerRef = useRef<null | AgentReducer<S, T>>(null);
138154

139155
const initialed = reducerRef.current !== null;
140156

141157
if (!initialed) {
142-
reducerRef.current = create(entry, ...middleWares);
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+
});
143165
}
144166

145167
const reducer = reducerRef.current as Reducer<S, Action>&ReducerPadding<S, T>;
@@ -157,7 +179,7 @@ export function useAgentMethods<T extends Model<S>, S>(
157179
red.disconnect();
158180
};
159181
},
160-
[],
182+
[version],
161183
);
162184

163185
return reducer.agent;

0 commit comments

Comments
 (0)