Skip to content

Suggestion: use object for input instead of tuple #99

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
OliverJAsh opened this issue Nov 28, 2019 · 4 comments
Open

Suggestion: use object for input instead of tuple #99

OliverJAsh opened this issue Nov 28, 2019 · 4 comments

Comments

@OliverJAsh
Copy link
Contributor

When passing in many inputs, it's awkward to remember the indexes inside the input tuple when you're trying to read/destructure a specific input, e.g:

useObservable(
  input$ => {
    const dispatch$ = input$.pipe(
      map(input => input[5]),
      distinctUntilChanged(),
    );

    /* … */
  },
  200,
  [
    props.shouldDisableInfiniteScroll,
    props.isDoneFetching,
    props.fetchDataParams,
    props.fetchDataAndBuildActions,
    props.dispatch,
    props.history,
  ],
);

If the inputs were represented as an object instead, they would be much easier to destructure.

useObservable(
  input$ => {
    const dispatch$ = input$.pipe(
      map(({ dispatch }) => dispatch),
      distinctUntilChanged(),
    );

    /* … */
  },
  200,
  pick(
    props,
    "shouldDisableInfiniteScroll",
    "isDoneFetching",
    "fetchDataParams",
    "fetchDataAndBuildActions",
    "dispatch",
    "history",
  ),
);
@OliverJAsh
Copy link
Contributor Author

OliverJAsh commented Feb 5, 2020

Another idea: the inputs could be provided as separate observables. This way, users don't have to destructure the observable, nor do they have to worry about adding distinctUntilChanged:

useObservable(
  inputs => {
    const { dispatch$ } = inputs;

    /* … */
  },
  200,
  { dispatch$: props.dispatch }
);

@OliverJAsh
Copy link
Contributor Author

I think observable-hooks solves this problem because you can do:

const dispatch$ = useObservable(pluckFirst, [props.dispatch]);

and then use that inside any closure.

@Sawtaytoes
Copy link

I like the idea of each prop being an observable, but that could get somewhat complex when listening to many of them.

@OliverJAsh
Copy link
Contributor Author

OliverJAsh commented Aug 25, 2020

Re. #99 (comment)

Another idea: the inputs could be provided as separate observables. This way, users don't have to destructure the observable, nor do they have to worry about adding distinctUntilChanged:

This is a start: https://stackblitz.com/edit/react-ts-p7ueqk.

@Brooooooklyn What do you think to this idea?

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

3 participants