Comments (3)
@sarensw This is actually normal behavior (because even when you change a "leaf" in the state, the root value also changes). ReSwift offers to skip identical state updates when the states conform to Equatable
. See: http://reswift.github.io/ReSwift/master/getting-started-guide.html#example-of-skipping-identical-state-updates
from reswift.
@DivineDominion , thanks a lot for the quickly reply. Interesting. I tried with .skip(==)
and it works. Coming from Typescript + Redux, this seems strange, though.
I took the following selector from some of my TypeScript code.
// only if the reference of .current changes, then update the component
const currentFile = useAppSelector(state => state.files.current)
// only if the length of the .files array changes, then update the component
const count = useAppSelector(state => state.files.files?.length)
So I can be very specific about the updates that I want to be notified about. And I don't have to skip same values (let alone make sure that Equatable
is implemented.
No complains here. Just something that I have to learn.
One thing that I also noticed is that I can't just select any arbitrary property that I want. It feels like it has to be struct what I can filter on. But maybe I am also missing something here.
from reswift.
@sarensw Swift is a bit stricter than vanilla JS when it comes to checking for value equality. It may be a good practice to slap "Equatable" onto all your subtypes just so you don't need to worry.
You can select arbitrary substates, but then you need to make them a Swift tuple. These suffer from not being equatable, so you get convenient substate selection but need to (!) add the .skip(==)
manually. That's because for tuples between 2 and 6 elements, a ==
overload exists; but the tuple is not a type that ca conform to Equatable
, so ReSwift can't skip it by default. See https://developer.apple.com/documentation/swift/equatable
Having said that:
We could copy the tuple ==
overload approach and offer substate selector overloads that do this by default, I believe. Requires tests, of course. If you'd be into that, let me know :)
from reswift.
Related Issues (20)
- Migrate from Travis CI to GitHub Actions? HOT 2
- Concurrency - protected reads HOT 2
- How to subscribe/unsubscribe store in a UIView like in UITableViewCell, CollectionViewCell etc ? HOT 1
- What's a good way to cast results of a subscription in SwiftUI to a desired output type? HOT 3
- Managing ReSwift app state inside FileDocument HOT 1
- Remove Travis from all ReSwift repos? / How to set up GH Actions
- ReSwift 7 Roadmap HOT 20
- Docs: Update outdated and vulnerable jQuery version HOT 3
- Array as a State HOT 1
- Clarification on Single Store object for an application. HOT 1
- Change visibility of Store from 'open' to 'public final'? HOT 2
- SIGSEGV on state.didSet HOT 4
- Using Inject with ReSwift HOT 1
- Testing: Waiting for store.dispatch() to complete HOT 2
- Huge CPU gap between ReSwift Store vs just SwiftUI ObservableObject HOT 1
- Crash: sometimes will crash at this point, what can i do to find the root cause HOT 11
- Crash when dispatching actions from inside StoreSubscriber.newState() HOT 2
- How to use a state on recursive screens? HOT 4
- When do you upgrade ReSwiftRouter ? Now,ReSwiftRouter just depends ReSwift 5.0.0, but lasted ReSwift is 6.1.1 HOT 2
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 reswift.