mbox+react

創(chuàng)建react項(xiàng)目

npx create-react-app my-app

釋放webpack配置

yarn eject(沒(méi)有g(shù)it提交需要commit一下,不要push)

下載裝飾器插件

yarn add @babel/plugin-proposal-decorators
- 配置package.json
  "babel": {
    "plugins": [
      [
        "@babel/plugin-proposal-decorators",
        {
          "legacy": true
        }
      ]
    ],
    "presets": [
      "react-app"
    ]
  }

下載mbox和mbox-react

 yarn add mbox mbox-react -D

新建store文件夾 store

store/person.js

import { observable,computed, action } from "mobx"


class Person {
  // @observable 變量名 = 值
  @observable obj = {
    username: "張三",
    sex:"男"
  }
  @observable age = 18

  @computed //當(dāng)age發(fā)生改變時(shí), 自動(dòng)觸發(fā)
   get doubleAge() {
    return this.age * 2
   }

  @action setName(name){ // 用戶(hù)操作  事件調(diào)用
      this.obj.username = name
  }
   // @action 方法名(參數(shù)) {
  //     console.log(參數(shù))
  // }
  @action setAge(){ // 用戶(hù)操作  事件調(diào)用
      console.log("this.age",this.age)
      this.age+=this.age
  }
}
const person = new Person()
export default person

store/index

import person from "./person.js"
const store = {
  person
}
export default store
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './store'
import { Provider } from 'mobx-react'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <Provider store={store}>
  <App />
</Provider>
);


App.js

import React, { Component } from 'react'
import {inject,observer} from 'mobx-react'
@inject('store')
@observer
export default class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      age: 18
    }
  }
  mutateAge = ()=>{
    this.props.store.person.setAge()
  }
  componentDidMount() {
    console.log("this.props",this.props)
  }
  render() {
    return (
      <div>
        我是App組件
        <ul>
          <li>姓名:{this.props.store.person.obj.username}</li>
          <li>年齡:{this.props.store.person.age}</li>
          <li>雙倍年齡:{this.props.store.person.doubleAge}</li>
          <li>性別:{this.props.store.person.obj.sex}</li>
        </ul>
        <button onClick={this.mutateAge}>修改年齡</button>
      </div>
    )
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容