Comments (5)
@hackerxian I did, and thanks for bringing it up! Both syntaxes are great (in fact we could easily support all 3), but there are a few small downsides, I think:
- Having >1 way to do something makes me more uncertain how to do that thing. If I see 3 different syntaxes floating around, which is the right one? Is one a legacy syntax? Are there differences between them?
- Using Undux in a really large codebase, a lot of people don't read docs and instead grep for usages. Assuming one form (eg.
store.set(k)(v)
) is the most popular in that codebase, people will use it anyway. When someone else comes along and uses a different form (eg.store.set(k, v)
), it might confuse people in code review (back to (1) again). - Speaking of grepping for usages, if you want to see every place where your key
'userList'
gets set today, you just grep forstore.set('userList')
and you'll get all the usages. If there are 3 forms, you'll have to grep for those too. - The
store.set(k)(v)
form encourages people to think in terms of partial application, which gives more concise, more readable code (onChange={store.set(k)}
).
Admittedly, these are pretty minor downsides. I think the guiding principle is: 1 way to do things, not more.
from undux.
This is an interesting idea. I went ahead and implemented it as an experiment in this PR.
Three downsides of this sort of setter syntax:
- We can't use curried setters, which are a convenient feature that works nicely with React APIs https://github.com/bcherny/undux#partial-application-all-the-way-through
- Setting a value now looks really different than React's
setState
API. The similarity between.set
and.setState
is intentional, and I think helps people understand what they're doing. - It's hard to understand at a glance that you're updating an Undux store (it just looks like you're setting a property on a prop, which is bad). It's magic, which might be unnecessary.
All of these points may be reasonable compromises for the sake of simplicity. So the API would look like:
withStore('a')(store =>
<div>a is {store.a}</div>
<button onClick={() => store.a++}>Add 1 to a</button>
)
from undux.
Do you consider this? Maybe better understand
store.set('number', 1) ;
store.set({number: 1}) ;
from undux.
can we automatically generate getter/setter, but not sure if we still can get advantage of compile errors.
store.get('addTodoTitle') => store.getAddTodoTitle
store.set('addTodoTitle') => store.setAddTodoTitle
from undux.
@zhy0216 There's no way to do that safely, unless we introduce a codegen script.
from undux.
Related Issues (20)
- RN Basic Example HOT 4
- Need to reference the Connect type HOT 4
- Functional updater form for store.set()
- Add ESM 'module' entrypoint HOT 2
- exhaustive-deps issue HOT 1
- Listen for any store change against initialState
- Connecting to different stores
- How to call a function AFTER the store has updated HOT 1
- Failed to minify undux when running npm run build HOT 1
- Subscriptions are fired multiple times HOT 2
- Is this project still being maintained? HOT 1
- Access store from a non component function.
- How to catch errors for all store subscriptions? HOT 1
- TypeError when using Store.Container HOT 2
- Can not update store in useEffect hooks function. HOT 1
- reduxDevtools plugin for namespaced stores HOT 8
- Discussion: Allow effects to return an Observable
- How can one update a store value from an asynchronous, external source? HOT 3
- React Native "createStore is not a function" HOT 2
- withLogger - slowing down UI rendering HOT 3
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 undux.