美文网首页
2023-11-08 Mobx是一个用于状态管理的JavaScr

2023-11-08 Mobx是一个用于状态管理的JavaScr

作者: 爱看小说的叶子 | 来源:发表于2023-11-07 16:52 被阅读0次

    Mobx的基本概念:

    Observable(可观察对象): 可观察对象是Mobx中的核心概念,它代表了你想要跟踪的状态。你可以使用observable函数来创建可观察对象。

    Observer(观察者): 观察者是响应状态变化的组件或函数。你可以使用observer高阶组件或autorun函数来创建观察者。

    作用:就是会自动更新里面的数据,重新渲染。

    Action(动作): 动作是用于修改状态的函数。Mobx要求状态只能在动作内部修改,以确保状态变化被正确跟踪。

    案例:

    注意: viter  + react + mobx  ,记得vite.config.js 添加 解析装饰器的插件,在plugins

    plugins: [react({

        babel: {

          plugins: [

            ["@babel/plugin-proposal-decorators", {

      legacy: true }],

            ["@babel/plugin-proposal-class-properties", {

      loose: true }],

          ],

        }

      })]

    (1)假设我们要创建一个简单的任务列表应用,使用Mobx来管理任务的状态。

    安装Mobx和React Mobx:

    npm install mobx mobx-react

    (2)创建一个Mobx存储(Store)来管理任务列表:

    // taskStore.js

    import { observable, action } from 'mobx';

    class TaskStore {

      @observable tasks = [];

      @action addTask(task) {

        this.tasks.push(task); // 这里刷新会将清除,

          localStorage.setItem('eprList', JSON.stringify(this.eprList));  // 可以使用这个保存

      }

      @action removeTask(index) {

        this.tasks.splice(index, 1);

      }

    }

    const taskStore = new TaskStore();

    export default taskStore;

    (3)创建React组件并使用Mobx的观察者:

    // TaskList.js

    import React from 'react';

    import { observer } from 'mobx-react';

    import taskStore from './taskStore';

    const TaskList = observer ( () => { // 这里observer

      return (

        <div>

          <ul>

            {taskStore.tasks.map((task, index) => (

              <li key={index}>

                {task}

                <button onClick={() => taskStore.removeTask(index)}>删除</button>

              </li>

            ))}

          </ul>

          <input

            type="text"

            placeholder="添加任务"

            onKeyPress={(e) => {

              if (e.key === 'Enter') {

                taskStore.addTask(e.target.value);

                e.target.value = '';

              }

            }}

          />

        </div>

      );

    });

    export default TaskList;

    (4)渲染应用:

    // App.js

    import React from 'react';

    import TaskList from './TaskList';

    function App() {

      return (

        <div>

          <h1>任务列表</h1>

          <TaskList />

        </div>

      );

    }

    export default App;

    (5)渲染整个应用:

    // index.js

    import React from 'react';

    import ReactDOM from 'react-dom';

    import App from './App';

    ReactDOM.render(

      <React.StrictMode>

        <App />

      </React.StrictMode>,

      document.getElementById('root')

    );

    (6)与redux比较的区别?

      生态系统和工具支持:

      MobX:MobX的生态系统相对较小,但也有一些常用的扩展和工具可用。它与React的集成非常好,并且有一些方便的React绑定库。

      Redux:Redux拥有庞大的生态系统和丰富的工具支持。它有许多中间件和插件可用,可以与各种前端框架和库集成。

    (7)在MobX中,异步操作?

      解答:可以通过使用async/await或者Promise来实现。下面是一种常见的使用异步操作的方式

      import { action, runInAction } from 'mobx';

    class MyStore {

      @action

      async fetchData() {

        try {

          const response = await fetch('https://api.example.com/data');

          const data = await response.json();

          // 更新状态

          runInAction(() => {

            this.data = data;

          });

        } catch (error) {

          console.error('Error fetching data:', error);

        }

      }

    }

    相关文章

      网友评论

          本文标题:2023-11-08 Mobx是一个用于状态管理的JavaScr

          本文链接:https://www.haomeiwen.com/subject/flsfwdtx.html