Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
N
Neos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
love_飞影
Neos
Commits
73863a6f
Commit
73863a6f
authored
Nov 29, 2022
by
Chunchi Che
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/observeStore' into 'main'
Feat/observe store See merge request
!24
parents
83c0f275
5a4ce916
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
2 deletions
+42
-2
src/store.ts
src/store.ts
+21
-1
src/ui/Duel/simpleDuel/mod.tsx
src/ui/Duel/simpleDuel/mod.tsx
+21
-1
No files found.
src/store.ts
View file @
73863a6f
/*
/*
* 全局状态存储模块
* 全局状态存储模块
* */
* */
import
{
configureStore
}
from
"
@reduxjs/toolkit
"
;
import
{
configureStore
,
Unsubscribe
}
from
"
@reduxjs/toolkit
"
;
import
joinedReducer
from
"
./reducers/joinSlice
"
;
import
joinedReducer
from
"
./reducers/joinSlice
"
;
import
chatReducer
from
"
./reducers/chatSlice
"
;
import
chatReducer
from
"
./reducers/chatSlice
"
;
import
playerReducer
from
"
./reducers/playerSlice
"
;
import
playerReducer
from
"
./reducers/playerSlice
"
;
...
@@ -18,5 +18,25 @@ export const store = configureStore({
...
@@ -18,5 +18,25 @@ export const store = configureStore({
},
},
});
});
// Ref: https://github.com/reduxjs/redux/issues/303
export
function
observeStore
<
T
>
(
select
:
(
state
:
RootState
)
=>
T
,
onChange
:
(
prev
:
T
|
null
,
cur
:
T
)
=>
void
):
Unsubscribe
{
let
currentState
:
T
|
null
=
null
;
const
changeHook
=
()
=>
{
const
nextState
=
select
(
store
.
getState
());
if
(
nextState
!==
currentState
)
{
onChange
(
currentState
,
nextState
);
currentState
=
nextState
;
}
};
const
unsubscribe
=
store
.
subscribe
(
changeHook
);
changeHook
();
return
unsubscribe
;
}
export
type
RootState
=
ReturnType
<
typeof
store
.
getState
>
;
export
type
RootState
=
ReturnType
<
typeof
store
.
getState
>
;
export
type
AppDispatch
=
typeof
store
.
dispatch
;
export
type
AppDispatch
=
typeof
store
.
dispatch
;
src/ui/Duel/simpleDuel/mod.tsx
View file @
73863a6f
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
import
{
IDuelPlate
,
TypeSelector
}
from
"
../duel
"
;
import
{
IDuelPlate
,
TypeSelector
}
from
"
../duel
"
;
import
{
useAppSelector
}
from
"
../../../hook
"
;
import
{
useAppSelector
}
from
"
../../../hook
"
;
import
React
,
{
useEffect
,
useRef
}
from
"
react
"
;
import
React
,
{
useEffect
,
useRef
}
from
"
react
"
;
import
type
{
RootStat
e
}
from
"
../../../store
"
;
import
{
RootState
,
observeStor
e
}
from
"
../../../store
"
;
import
*
as
BABYLON
from
"
@babylonjs/core
"
;
import
*
as
BABYLON
from
"
@babylonjs/core
"
;
import
renderHands
from
"
./hands
"
;
import
renderHands
from
"
./hands
"
;
import
renderMonsters
from
"
./monsters
"
;
import
renderMonsters
from
"
./monsters
"
;
...
@@ -107,6 +107,26 @@ export default class SimpleDuelPlateImpl implements IDuelPlate {
...
@@ -107,6 +107,26 @@ export default class SimpleDuelPlateImpl implements IDuelPlate {
});
});
},
[
canvasRef
,
hands
]);
},
[
canvasRef
,
hands
]);
useEffect
(()
=>
{
// 监听状态变化,并实现动画
const
onHandsChange
=
(
prev_hands
:
CardMeta
[]
|
null
,
cur_hands
:
CardMeta
[]
)
=>
{
console
.
log
(
prev_hands
,
"
change to
"
,
cur_hands
);
};
const
unsubscribe
=
observeStore
(
this
.
handsSelector
||
defaultHandsSelector
,
onHandsChange
);
return
()
=>
{
// 取消监听
unsubscribe
();
};
},
[]);
return
(
return
(
<
canvas
<
canvas
width=
{
window
.
innerWidth
}
width=
{
window
.
innerWidth
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment