5.4.0 • Published 4 months ago

mobx-view-model v5.4.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

mobx-view-model

NPM version test status build status npm download bundle size

MobX ViewModel power for ReactJS

Library for integration MVVM pattern with MobX and React.

Documentation

Documentation can be found at js2me.github.io/mobx-view-model

Example

with HOC

import { withViewModel, ViewModelBase, ViewModelProps } from "mobx-view-model";
import { observer } from "mobx-react-lite";
import { action, observable } from "mobx";

class UserBadgeVM extends ViewModelBase<{ userId: Maybe<string> }> {
  private userSource = new UserSource({ abortSignal: this.unmountSignal });

  willMount() {
    this.userSource.connectWith(() => this.payload.userId)
  }

  get user() {
    return this.userSource.data;
  }

  get isAdmin() {
    return this.user?.isAdmin
  }
}

const UserBadgeView = observer(({ model }: ViewModelProps<UserBadgeVM>) => (
  <div className={'size-4 bg-[green]'}>
    <h3>{model.user?.fullName}</h3>
    {model.isAdmin && <span>admin</span>}
  </div>
))

export const UserBadge = withViewModel(UserBadgeVM)(UserBadgeView);


// <UserBadge payload={{ userId: '1' }}>

with hook

import { ViewModelBase, ViewModelPayload, useCreateViewModel } from "mobx-view-model";
import { observer } from "mobx-react-lite";
import { action, observable } from "mobx";

class UserBadgeVM extends ViewModelBase<{ userId: Maybe<string> }> {
  private userSource = new UserSource({ abortSignal: this.unmountSignal });

  willMount() {
    this.userSource.connectWith(() => this.payload.userId)
  }

  get user() {
    return this.userSource.data;
  }

  get isAdmin() {
    return this.user?.isAdmin
  }
}

export const UserBadge = observer(({ userId }: ViewModelPayload<UserBadgeVM>) => {
  const model = useCreateViewModel(UserBadgeVM, { userId });

  return (
    <div className={'size-4 bg-[green]'}>
      <h3>{model.user?.fullName}</h3>
      {model.isAdmin && <span>admin</span>}
    </div>
  )
})


// <UserBadge payload={{ userId: '1' }}>
5.4.0

4 months ago

5.3.4

4 months ago

5.3.3

4 months ago

5.3.2

4 months ago

5.3.1

5 months ago

5.3.0

5 months ago

5.2.16

5 months ago

5.2.15

5 months ago

5.2.14

5 months ago

5.2.13

5 months ago

5.2.12

5 months ago

5.2.11

5 months ago

5.2.10

5 months ago

5.2.9

5 months ago

5.2.8

5 months ago

5.2.7

5 months ago

5.2.6

5 months ago

5.2.5

5 months ago

5.2.4

5 months ago

5.2.3

5 months ago

5.2.2

5 months ago

5.2.0

5 months ago

5.1.13

6 months ago

5.1.12

6 months ago

5.1.11

6 months ago

5.1.10

6 months ago

5.1.9

6 months ago

5.1.8

6 months ago

5.1.7

6 months ago

5.1.6

6 months ago

5.1.5

6 months ago

5.1.4

6 months ago

5.1.3

6 months ago

5.1.2

6 months ago

5.1.1

6 months ago

5.1.0

6 months ago

5.0.20

6 months ago

5.0.19

6 months ago

5.0.15

6 months ago

5.0.14

6 months ago

5.0.13

6 months ago

5.0.12

7 months ago

5.0.11

7 months ago

5.0.10

7 months ago

5.0.9

7 months ago

5.0.8

7 months ago

5.0.7

7 months ago

5.0.6

7 months ago

5.0.5

7 months ago

5.0.4

7 months ago

5.0.3

7 months ago

5.0.2

7 months ago

5.0.1

7 months ago

5.0.0

7 months ago

4.4.11

7 months ago

4.4.10

7 months ago

4.4.9

7 months ago

4.4.8

7 months ago

4.4.7

7 months ago

4.4.6

7 months ago

4.4.5

7 months ago

4.4.4

7 months ago

4.4.3

7 months ago

4.4.2

7 months ago

4.4.1

7 months ago

4.4.0

7 months ago

4.3.19

7 months ago

4.3.18

7 months ago

4.3.17

7 months ago

4.3.16

7 months ago

4.3.15

7 months ago

4.3.14

7 months ago

4.3.13

7 months ago

4.3.12

7 months ago

4.3.11

7 months ago

4.3.10

7 months ago

4.3.9

8 months ago

4.3.8

8 months ago

4.3.7

8 months ago

4.3.6

8 months ago

4.3.5

8 months ago

4.3.4

8 months ago