Skip to content

useViewModel hook ​

Provides access to an already created ViewModel instance in a Solid component.

To create a ViewModel

Use useCreateViewModel or withViewModel.

API Signature ​

tsx
function useViewModel<VM extends AnyViewModel>(): VM;

function useViewModel<VM extends AnyViewModel>(
  vmLookup: ViewModelLookup<VM>,
): VM;

Usage ​

1. Active parent (no lookup) ​

Returns the nearest active ViewModel from the Solid tree (set by withViewModel).

tsx
import { useViewModel } from "mobx-view-model-solid";

export const YourComponent = () => {
  const yourVM = useViewModel<YourVM>();
  return <span>{yourVM.id}</span>;
};

2. Lookup with ViewModelLookup ​

Requires ViewModelStore

Connect it with <ViewModelsProvider />.

tsx
import { useViewModel } from "mobx-view-model-solid";

export const YourComponent = () => {
  const yourVM = useViewModel<YourVM>("view-model-id");
  return <span>{yourVM.id}</span>;
};

3. Lookup by anchor component ​

When using anchors or connect(), pass the anchor as lookup:

tsx
import { useViewModel, withViewModel } from "mobx-view-model-solid";

const Anchor = () => null;
const MainView = withViewModel(VM, View, { anchors: [Anchor] });

const Consumer = () => {
  const model = useViewModel<VM>(Anchor);
  return <span>{model.id}</span>;
};