Comments (5)
You need to clearTrackState
in the reverse order you started tracking it. So in your doRender()
try this:
function doRender() {
let trackId = trackState()
app.state.Sort.Field1
let trackId2 = trackState()
app.state.Sort.Field2
let paths2 = clearTrackState(trackId2)
let paths = clearTrackState(trackId)
}
from overmind.
thanks...but its a bit more complex because the second render may happen or not and i don't have direct control over it.
Shouldn't it work as well with 2 subsequent (= not nested) trackings as well? i would expect that because i can update the listeners with paths as many times as i want.
from overmind.
thats the failing testcase i've created. maybe it helps:
test('listener should be called after updating paths', () => {
const tree = new ProxyStateTree({
foo: 'bar',
bar: 'baz',
})
const state = tree.get()
let updateCount = 0
// access foo and track it
let trackId = tree.startPathsTracking()
state.foo
let paths = tree.clearPathsTracking(trackId)
const listener = tree.addFlushListener(paths, () => {
updateCount++
})
// access bar and track it
trackId = tree.startPathsTracking()
state.bar
paths = tree.clearPathsTracking(trackId)
listener.update(paths)
// mutating foo should call listener
tree.startMutationTracking()
state.foo = 'bar2'
tree.clearMutationTracking()
tree.flush()
expect(updateCount).toBe(1)
})
from overmind.
I don't think the test case should pass.
You are explicitly calling clearPathsTracking
after accessing state.foo
and therefore these paths are cleared and should not leak into the next clearPathsTracking
.
startPathsTracking
/clearPathsTracking
should be called before and after each render cycle is done. This allows to differentiate the various nested render calls and don't leak path tracking to a parent.
Additionally the behaviour of listener.update
ensures that only the tracked paths are observed for changes and there are no stall paths that will be tracked indefinitely.
from overmind.
hmm yes, i did something wrong as it looks like.
after reverting everything back to regular "nested" - tracking it works as expected :)
i think i went down the wrong route after i've recognised that a property wasn't tracked but it was accessed. now its still not tracked and i need to elaborate on that.
thanks for pushing me into the right direction :)
from overmind.
Related Issues (20)
- Is there any way to change states outside component? HOT 10
- [BUG] State mutation error HOT 3
- Svelte + Overmind : Function called outside component initialization
- [BUG] Statemachine errors on send(), possible documentation issue HOT 2
- Devtools: add the option to fail silently if port wasn't found HOT 2
- [BUG] Vue State Hooks loses reactivity once using in nested components. HOT 4
- [BUG] States changes are not reflecting in the UI but dev tool shows the value changed HOT 1
- [BUG] Typo in "ensureMutationTrackingIsEnabled" function HOT 3
- Error: While trying to resolve module `phoenix` HOT 1
- [BUG] TypeError with webpack 5 HOT 1
- [BUG] proxy-state-tree - You are mutating the path HOT 1
- Does the graphql package work with any subscriptions on a graphql server or is it specific to the phoenix framework?
- [BUG] svelte reactivity broken on subsequent state changes cross-components HOT 4
- [Question] Is the project dead? Is so, what are options to migrate to? HOT 5
- [BUG] Incompatible with React 18 with Strict Mode HOT 13
- Page doesn't re-render after navigation in Next 13 HOT 12
- [BUG] `overmind-react` - multiple overmind named instances HOT 1
- [BUG] Overmind JS Not working in Next JS 13 HOT 1
- [BUG] Usage of 'useSyncExternalStore' causes errors with react below version 18 HOT 3
- [BUG] Can't mock overmind for jest snapshots HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from overmind.