Comments (4)
Transition hooks were never intended to be called on the initial create. For example, if you return false
to cancel the initial transition, where does that leave us?
Think of transition hooks like the componentWillUpdate
React component lifecycle method.
from history.
Transition hooks were never intended to be called on the initial create.
Yes, but I'm suggesting that doing so now would be a good idea. π
For example, if you
return false
to cancel the initial transition, where does that leave us?
Abort (never call listeners) and log an error or warning to the console.
This feature is a must have if we want to allow users to use transition hooks to block transitions during async data loading. I've tried to make the case for why I think this is important. I'm guessing, however, that we still aren't on one page about whether or not the use-case is legitimate. Until we agree on the use-case, we're not going to get very far with the implementation discussion.
from history.
This feature is a must have if we want to allow users to use transition hooks to block transitions during async data loading
I don't agree. You already have an API to block transitions. What you're looking for is a way to block the initial "transition" while you load data, which you could easily do with a history enhancer:
function useDataLoader(createHistory) {
return function (options={}) {
let { dataLoader, ...historyOptions } = options
let history = createHistory(historyOptions)
let prevLocation = null
function listen(listener) {
return history.listen(function (location) {
if (prevLocation == null) {
// Block the initial transition and load some data.
// loadData is an API that asynchronously loads some
// data for a given location.
dataLoader.loadData(location, function () {
// getData is a synchronous method that gets previously
// loaded data from a client-side cache.
listener(location, dataLoader.getData(location))
})
} else {
// Data was already loaded in the listenBefore callback.
listener(location, dataLoader.getData(location))
}
// Hang onto the previous location to know if
// we're in the initial listen callback or not.
prevLocation = location
})
}
// Use a listenBefore hook to block subsequent
// transitions while we load data.
history.listenBefore(function (location, callback) {
dataLoader.loadData(location, callback)
})
return {
...history,
listen
}
}
}
This isn't really that complex, and it means that we don't have to make assumptions in the history package about how people want to do their data loading.
from history.
Closing this, as the conversation has stalled. Hopefully the code I posted above helps.
from history.
Related Issues (20)
- Named exports donβt work with Node.js ESM support HOT 1
- Sourcemaps are blank HOT 1
- Use History in redux actions HOT 2
- Location type should have template for unknown for state HOT 3
- doing history.go() does NOT trigger a blocker callback handler HOT 1
- Did TS declaration file disappear for v4? HOT 4
- Wrong action after clicking on Forward button in browser HOT 3
- Need history.BackTo(string)
- Is it possible to access the history bundled into React Router? HOT 1
- globalHistory.pushState function excuted failed in baidu.app
- [v6] Missing hashType={"noslash"} of HashRouter HOT 3
- [react-router-dom v6] HashRouter support HOT 1
- Add index property to BrowserHistory, HashHistory and corresponding Update
- Why `history.length` is gone? HOT 7
- createBrowserHistory() breaks history URL on iOS 11
- history
- is this project abandoned? HOT 2
- Navigate replace without generate new location.key
- hash history url is not parsed correctly with query params
- ReferenceError: document is not defined in Next.JS 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 history.