Tillitsdone
down Scroll to discover

Integrate MobX with React Functional Components

Learn how to effectively integrate MobX state management with React functional components.

Discover best practices, setup steps, and advanced patterns for building scalable applications.
thumbnail

How to Integrate MobX with React Functional Components

Abstract geometric shapes resembling interlocking puzzle pieces floating in space bright cyan and mustard yellow gradients swirling together against a pure white background high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

MobX has become a powerful state management solution for React applications, offering a simpler alternative to Redux. Let’s explore how to effectively integrate MobX with React functional components.

Setting Up MobX in Your React Project

First, let’s install the necessary dependencies:

Terminal window
npm install mobx mobx-react-lite

Creating Your First MobX Store

Let’s create a simple todo store to demonstrate MobX’s capabilities:

import { makeObservable, observable, action } from 'mobx';
class TodoStore {
todos = [];
constructor() {
makeObservable(this, {
todos: observable,
addTodo: action,
toggleTodo: action
});
}
addTodo = (text) => {
this.todos.push({ id: Date.now(), text, completed: false });
};
toggleTodo = (id) => {
const todo = this.todos.find(todo => todo.id === id);
if (todo) {
todo.completed = !todo.completed;
}
};
}
export const todoStore = new TodoStore();

Flowing abstract ribbons intertwining in space dusty lavender and white colors creating smooth curves and spirals minimal composition high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

Using MobX in Functional Components

Now, let’s create a component that uses our store:

import { observer } from 'mobx-react-lite';
import { todoStore } from './stores/TodoStore';
const TodoList = observer(() => {
return (
<div>
<button onClick={() => todoStore.addTodo("New Task")}>Add Todo</button>
{todoStore.todos.map(todo => (
<div key={todo.id} onClick={() => todoStore.toggleTodo(todo.id)}>
{todo.text} - {todo.completed ? "" : ""}
</div>
))}
</div>
);
});

Best Practices and Advanced Patterns

Using Context for Store Injection

Instead of importing stores directly, use React Context for better testability:

import { createContext, useContext } from 'react';
const StoreContext = createContext(null);
export const StoreProvider = ({ children }) => {
const store = new TodoStore();
return (
<StoreContext.Provider value={store}>
{children}
</StoreContext.Provider>
);
};
// Custom hook to use the store
export const useTodoStore = () => {
const store = useContext(StoreContext);
if (!store) {
throw new Error('Using store outside provider!');
}
return store;
};

Cosmic nebula with swirling patterns combining bright cyan and mustard yellow clouds in space stars scattered throughout high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

Computed Values

MobX shines with computed values. Here’s how to implement them:

class TodoStore {
// ... previous code ...
get completedTodosCount() {
return this.todos.filter(todo => todo.completed).length;
}
constructor() {
makeObservable(this, {
// ... previous observables ...
completedTodosCount: computed
});
}
}

Remember to always wrap your components with observer when they consume observable values. This ensures your components re-render when the observed data changes.

Aerial view of abstract landscape with flowing patterns dusty lavender and white geometric shapes creating organic formations viewed from above high-quality ultra-realistic cinematic 8K UHD high resolution sharp and detail

icons/logo-tid.svg

Talk with CEO

Ready to bring your web/app to life or boost your team with expert Thai developers?
Contact us today to discuss your needs, and let’s create tailored solutions to achieve your goals. We’re here to help at every step!
🖐️ Contact us
Let's keep in Touch
Thank you for your interest in Tillitsdone! Whether you have a question about our services, want to discuss a potential project, or simply want to say hello, we're here and ready to assist you.
We'll be right here with you every step of the way.
Contact Information
rick@tillitsdone.com+66824564755
Find All the Ways to Get in Touch with Tillitsdone - We're Just a Click, Call, or Message Away. We'll Be Right Here, Ready to Respond and Start a Conversation About Your Needs.
Address
9 Phahonyothin Rd, Khlong Nueng, Khlong Luang District, Pathum Thani, Bangkok Thailand
Visit Tillitsdone at Our Physical Location - We'd Love to Welcome You to Our Creative Space. We'll Be Right Here, Ready to Show You Around and Discuss Your Ideas in Person.
Social media
Connect with Tillitsdone on Various Social Platforms - Stay Updated and Engage with Our Latest Projects and Insights. We'll Be Right Here, Sharing Our Journey and Ready to Interact with You.
We anticipate your communication and look forward to discussing how we can contribute to your business's success.
We'll be here, prepared to commence this promising collaboration.
Frequently Asked Questions
Explore frequently asked questions about our products and services.
Whether you're curious about features, warranties, or shopping policies, we provide comprehensive answers to assist you.