详解如何在React函数式组件中使用MobX

 更新时间:2024年01月05日 11:43:44   作者:慕仲卿  
MobX 是一个简洁的状态管理库,它通过透明的函数响应式编程(TFRP)使得状态管理变得简单和可扩展,下面就跟随小编一起来了解一下如何在React函数式组件中使用MobX吧

MobX 是一个简洁的状态管理库,它通过透明的函数响应式编程(TFRP) 使得状态管理变得简单和可扩展。在 React 函数式组件中使用 MobX 可以让我们更轻松地管理组件状态。这篇文章将介绍如何在 React 函数式组件中结合使用 MobX 和 mobx-react 包提供的 observer 函数以及 ProvideruseContext

安装

首先,需要确保 mobxmobx-react 已经添加到项目依赖中。

npm install mobx mobx-react

定义你的 Store 

创建一个 store 来存储应用状态。

import { makeAutoObservable } from 'mobx';

class TodoStore {
  todos = [];

  constructor() {
    makeAutoObservable(this);
  }

  addTodo(todo) {
    this.todos.push(todo);
  }

  get todoCount() {
    return this.todos.length;
  }
}

export const todoStore = new TodoStore();

使用 Provider 和 useContext 提供和使用 Store

通过 Provider 可以将 store 传递到 React 组件树中。然后,使用 React 的 useContext 钩子函数将 store 注入到函数式组件中。

创建一个 context:

import { createContext } from 'react';
import { todoStore } from './TodoStore';

export const StoreContext = createContext(todoStore);

使用 Provider 将 store 提供给组件:

import React from 'react';
import ReactDOM from 'react-dom';
import { StoreContext } from './store';
import App from './App';
import { todoStore } from './TodoStore';

ReactDOM.render(
  <StoreContext.Provider value={todoStore}>
    <App />
  </StoreContext.Provider>,
  document.getElementById('root')
);

在函数式组件中使用 Store

在函数式组件中,可以通过 useContext 钩子和 observer 函数来使用 store 和响应其变化。

import React, { useState, useContext } from 'react';
import { observer } from 'mobx-react';
import { StoreContext } from './store';

const TodoList = observer(() => {
  const store = useContext(StoreContext);
  const [newTodo, setNewTodo] = useState('');

  const handleInputChange = (e) => {
    setNewTodo(e.target.value);
  };

  const handleFormSubmit = (e) => {
    e.preventDefault();
    store.addTodo(newTodo);
    setNewTodo('');
  };

  return (
    <div>
      <form onSubmit={handleFormSubmit}>
        <input
          type="text"
          value={newTodo}
          onChange={handleInputChange}
        />
        <button type="submit">Add Todo</button>
      </form>
      <ul>
        {store.todos.map((todo, index) => (
          <li key={index}>{todo}</li>
        ))}
      </ul>
      <div>Total Todos: {store.todoCount}</div>
    </div>
  );
});

export default TodoList;

在上述代码中,TodoList 组件通过 useContext 获取到 todoStore,通过 observer 函数包裹组件以确保组件能响应状态变化。每当状态更新时(如添加了一个 todo),TodoList 组件会重新渲染以反映最新的状态。

通过使用 MobX、Provider 和 React 的 Context API,我们可以在函数式组件中便利地管理和使用状态。

到此这篇关于详解如何在React函数式组件中使用MobX的文章就介绍到这了,更多相关React MobX内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文掌握React 组件树遍历技巧

    一文掌握React 组件树遍历技巧

    这篇文章主要为大家介绍了React 组件树遍历技巧的掌握,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • React组件对子组件children进行加强的方法

    React组件对子组件children进行加强的方法

    这篇文章主要给大家介绍了关于React组件中对子组件children进行加强的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用React具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • React+Node.js实现大文件传输与断点续传

    React+Node.js实现大文件传输与断点续传

    这篇文章主要为大家详细介绍了如何使用React前端和Node.js后端实现大文件传输和断点续传的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以参考下
    2024-12-12
  • React路由跳转的实现示例

    React路由跳转的实现示例

    在React中,可以使用多种方法进行路由跳转,本文主要介绍了React路由跳转的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • React和Vue的props验证示例详解

    React和Vue的props验证示例详解

    这篇文章主要介绍了React和Vue的props验证,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 解决React报错You provided a `checked` prop to a form field

    解决React报错You provided a `checked` prop&n

    这篇文章主要为大家介绍了React报错You provided a `checked` prop to a form field的解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • React 子组件向父组件传值的方法

    React 子组件向父组件传值的方法

    本篇文章主要介绍了React 子组件向父组件传值的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • React中设置样式style方式

    React中设置样式style方式

    这篇文章主要介绍了React中设置样式style方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • React中事件的类型定义方式

    React中事件的类型定义方式

    这篇文章主要介绍了React中事件的类型定义方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • React Native实现地址挑选器功能

    React Native实现地址挑选器功能

    这篇文章主要为大家详细介绍了React Native仿地址挑选器功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论