React中的状态管理---Mobx

简介: React中的状态管理---Mobx

Mobx的介绍

Mobx是一个功能强大,上手非常容易的状态管理工具。redux的作者也曾经向大家推荐过它,在不少情况下可以使用Mobx来替代掉redux。

16ad01f9346732a5_tplv-t2oaga2asx-image.png

Mobx使用流程

创建项目

npx create-react-app mobx

进入项目

cd mobx

项目抽离

yarn eject

安装mobx mobx-react

yarn add mobx mobx-react


注意: 如果git冲突


 解决: 我们要原操作先放到本地暂存盘


 git add .


 git commit -m '安装mobx  mobx-react'


 注意不要git push

配置装饰器(修饰器 es6 ) babel

yarn add babel-plugin-transform-decorators-legacy -D
yarn add @babel/preset-env -D
yarn add babel-plugin-transform-class-properties -D
yarn add @babel/plugin-proposal-decorators -D

配置package.json

"babel": {
    "plugins": [
      [
        "@babel/plugin-proposal-decorators",
        {
          "legacy": true
        }
      ],
      "transform-class-properties"
    ],
    "presets": [
      "react-app",
      "@babel/preset-env"
    ]
    },

注意: 以下两个配置顺序不可更改

[
        "@babel/plugin-proposal-decorators",
        {
          "legacy": true
        }
      ],
      "transform-class-properties"

项目中 mobx应该怎么用?

新建store目录

src下建立

src
     store
       home
         index.js
       car 
         index.js
       index.js

以这种结构建立文件和目录

在主入口文件中 使用 Provider

import store from './store'
import { Provider } from 'mobx-react'
ReactDOM.render(
  <Provider store = { store }>
    <App />
  </Provider>
, document.getElementById('root'));

打造mobx 数据包

import {
       observable, computed,action
     } from 'mobx'
     class Home {
       @observable  //监听 age
         age = 18
       @computed    //当age发生改变时, 自动触发
         get doubleAge(){
           return this.age *= 2
         }
       @action  // 用户操作  事件调用
         increment(){
           this.props.store.home.age ++ 
           console.log( this.props.store.home.age )
           //数据请求
           fetch('/data/data.json')
           .then(res => res.json())
           .then( result => console.log( result ))
           .catch( error => console.log( error ))
         }
     }
     const home = new Home()
     export default home

打造store

store/index.js

import home from './home'
  const store = {
    //实例
    home
  }
  export default store


组件内使用数据

this.props.store.xxx 可以拿到数据


注意:


this.porps里面没有找到 @action 装饰器定义的方法, 但是可以直接使用,

this会丢失 this.props.store.home.increment.bind(this)


在你要使用store的组件上记得做观察

import React,{ Component,Fragment } from 'react'
import { inject,observer } from 'mobx-react'
@inject('store')
@observer
class Count extends Component {
    constructor ( props ) {
        super( props )
        props.store.count.change = props.store.count.change.bind( this )//this丢失的解决
      }
      increment = () => {
        console.log( 'mine' )
        this.props.store.count.change()
      }
    render () {
        return (
            <Fragment>
                <button onClick = { this.increment }>点我+</button>
                <p>count:{ this.props.store.count.count} </p>
            </Fragment>
        )
    }
}
export default Count
相关文章
|
1天前
|
缓存 前端开发 API
【亮剑】在React中实现鼠标悬停显示文本,可以通过状态管理实现。
【4月更文挑战第30天】在React中实现鼠标悬停显示文本,可以通过状态管理实现。基础方法包括使用本地状态(useState)或结合Context和Reducer。在组件中,利用onMouseEnter和onMouseLeave事件改变状态以触发条件渲染。性能优化应注意避免不必要的渲染、正确设置依赖项数组、使用Memoization以及注意事件绑定。实战案例展示了在博客平台中,悬停文章标题显示摘要,提升用户体验。关注性能优化,避免过度渲染,使React应用保持快速响应。
|
1天前
|
存储 SQL 前端开发
React&Nest.js社区平台(四)——✏️文章发布与管理实战
React&Nest.js社区平台(四)——✏️文章发布与管理实战
|
1天前
|
资源调度 前端开发 JavaScript
React Router:React应用的路由管理
【4月更文挑战第25天】React Router是React的官方路由库,用于管理SPA的路由。它基于组件,将URL映射到React组件,核心概念包括路由、链接和导航。设置路由时,在根组件中使用BrowserRouter或HashRouter,包裹Routes组件,定义Route规则。Link组件用于创建内部链接,实现导航。高级特性包括嵌套路由、参数化路由和编程式导航,如子路由、动态参数和JavaScript控制的导航。掌握React Router能帮助开发者更高效地构建复杂的React应用。
|
1天前
|
前端开发 JavaScript API
React的Context API:全局状态管理的利器
【4月更文挑战第25天】React的Context API解决了深层组件间状态共享的难题,提供全局状态管理方案。通过`Provider`和`Consumer`组件,或结合`useContext` Hook,实现状态在组件树中的传递。最佳实践包括避免过度使用,分离逻辑,以及在必要时与Redux或MobX结合。Context API简化了数据传递,但需谨慎使用以保持代码清晰。
|
1天前
|
前端开发 JavaScript
React中的状态管理:useState与useReducer的使用与探讨
【4月更文挑战第25天】本文探讨了React中构建动态界面的关键——状态管理,重点关注`useState`和`useReducer` Hook。`useState`适用于简单状态管理,例如计数器,而`useReducer`在处理复杂逻辑和多个状态更新时更具优势,提供更好的组织和可维护性。选择使用哪个取决于状态逻辑复杂度、可维护性和性能需求。合理运用这两个工具能实现高效、可维护的React应用。
|
1天前
|
前端开发
探索React Hooks:一种全新的组件逻辑管理方式
React Hooks是React 16.8版本引入的一项新功能,它改变了我们编写React组件的方式。本文将从Hooks的起源讲起,逐步分析Hooks的优势,并通过具体示例展示Hooks在组件逻辑管理中的应用,旨在帮助读者更好地理解和运用React Hooks。
|
1天前
|
前端开发 数据处理 开发者
React的useState:开启组件状态管理的新篇章
React的useState:开启组件状态管理的新篇章
|
1天前
|
前端开发
利用React Hooks优化前端状态管理
本文将深入介绍如何利用React Hooks优化前端状态管理,包括Hooks的概念、使用方法以及与传统状态管理方式的对比分析,帮助前端开发人员更好地理解和应用这一现代化的状态管理方案。
|
1天前
|
存储 前端开发 测试技术
useReducer 的奇妙世界:探索 React 状态管理的新境界(下)
useReducer 的奇妙世界:探索 React 状态管理的新境界(下)
|
1天前
|
前端开发
useReducer 的奇妙世界:探索 React 状态管理的新境界(中)
useReducer 的奇妙世界:探索 React 状态管理的新境界(中)

热门文章

最新文章