File tree Expand file tree Collapse file tree 2 files changed +16
-1
lines changed Expand file tree Collapse file tree 2 files changed +16
-1
lines changed Original file line number Diff line number Diff line change @@ -46,6 +46,10 @@ export const createInstance = (defaultProps = {}) => {
46
46
47
47
componentDidUpdate ( prevProps ) {
48
48
if ( prevProps . watch !== this . props . watch ) this . load ( )
49
+ if ( prevProps . promiseFn !== this . props . promiseFn ) {
50
+ this . cancel ( )
51
+ if ( this . props . promiseFn ) this . load ( )
52
+ }
49
53
}
50
54
51
55
componentWillUnmount ( ) {
Original file line number Diff line number Diff line change @@ -205,6 +205,17 @@ test("cancels pending promise when unmounted", async () => {
205
205
expect ( onResolve ) . not . toHaveBeenCalled ( )
206
206
} )
207
207
208
+ test ( "cancels and restarts the promise when promiseFn changes" , async ( ) => {
209
+ const promiseFn1 = jest . fn ( ) . mockReturnValue ( Promise . resolve ( "one" ) )
210
+ const promiseFn2 = jest . fn ( ) . mockReturnValue ( Promise . resolve ( "two" ) )
211
+ const onResolve = jest . fn ( )
212
+ const { rerender } = render ( < Async promiseFn = { promiseFn1 } onResolve = { onResolve } /> )
213
+ rerender ( < Async promiseFn = { promiseFn2 } onResolve = { onResolve } /> )
214
+ await Promise . resolve ( )
215
+ expect ( onResolve ) . not . toHaveBeenCalledWith ( "one" )
216
+ expect ( onResolve ) . toHaveBeenCalledWith ( "two" )
217
+ } )
218
+
208
219
test ( "does not run promiseFn on mount when initialValue is provided" , ( ) => {
209
220
const promiseFn = jest . fn ( ) . mockReturnValue ( Promise . resolve ( ) )
210
221
render ( < Async promiseFn = { promiseFn } initialValue = { { } } /> )
@@ -376,7 +387,7 @@ test("createInstance allows setting default props", async () => {
376
387
expect ( onResolve ) . toHaveBeenCalledWith ( "done" )
377
388
} )
378
389
379
- test ( "An unrelated change in props does not update the Context" , async ( ) => {
390
+ test ( "an unrelated change in props does not update the Context" , async ( ) => {
380
391
let one
381
392
let two
382
393
const { rerender } = render (
You can’t perform that action at this time.
0 commit comments