mobx使用数组提示越界_记录 mobx,mobx-react, 配置与使用 (踩坑版)

记录 mobx,mobx-react, 配置与使用 (踩坑版)

最近项目用到了 Mobx 开发, 配置环境是我们老大安装好的然后我是在这基础上使用而已, 今天得闲, 自己学着配置了一番, 这其中踩过的坑也是不计其数, 以下就记录一下自己在安装过程中踩过的坑.

安装

安装 mobx,mobx-react;

npm install mobx mobx-react --save

安装好这个不要着急直接用, 我们还缺少安装 es7 装饰器语法转义的插件,(注: 如果没安装转义插件就会出现 @符号报错, babel-preset-stage-1, 这个一定是要 babel-preset-stage-1 版本的, 不能使用 babel-preset-stage-3, 不然会有后面 "=" 报错.)

npm install babel-plugin-transform-decorators-legacy babel-plugin-transform-decorators babel-preset-stage-1 --save

安装好之后用在. babelrc 文件里边添加{

"presets":["es2015","react","stage-1"],

"plugins":["transform-decorators-legacy","transform-decorators"]

}

好啦, 以上就是安装步骤, 下面简单介绍下怎么操作.

{

Observable: 可观察的状态,

observer: 观察者,

Actions: 动作,

inject: 将 Gstore 注入到 props 上,

}

在这新建新建一个 GStore.js 文件,import{observable,action}from'mobx'

classGstore{

@observablenum=0;

@actionschangeNum=(n)=>{

this.num=n;

}

}

exportdefaultnewGStore();

在入口 index.jsx

ab7653affab982b574eb7acc55df2e04.gif

引入 (将 GStore 作为全局引入到 props 上);import{observer,Provider}from'mobx-react';

importGStorefrom'./GStore';

ReactDOM.render(

,

document.getElementById('root')

);

在 Login.jsx 页面中调用 GStore;importReactfrom'react';

importPropTypesfrom'prop-types';

import{observer,inject}from'mobx-react';

importbindAllfrom'lodash.bindall';

@inject('GStore')

@observer

classLoginComponentextendsReact.Component{

constructor(props){

super(props);

bindAll(this,[

'hanldChangeNum',

]);

this.state={

};

}

hanldChangeNum(){

this.props.GStore.changeNum(this.props.GStore.num+1);

}

render(){

return(

Hello,world!

{this.props.GStore.oid}

点我!

);

};

}

exportdefaultLoginComponent;

每次点击点击 GStore.num 的数值 + 1

如果想在当前组件下用状态值, 可以在同级 containers 新建个 store 文件再新建 index.jsimport{observable,action}from'mobx';

classStore{

@observablestoreNum=140;

@actionchangeStoreNum=(id)=>{

this.storeNum=id;

}

}

exportdefaultnewStore;

在页面调用的则是importReactfrom'react';

importPropTypesfrom'prop-types';

import{observer,inject}from'mobx-react';

importbindAllfrom'lodash.bindall';

importStorefrom'../store'

@inject('GStore')

@observer

classLoginComponentextendsReact.Component{

constructor(props){

super(props);

bindAll(this,[

'hanldChangeOid'

]);

this.state={

};

}

componentWillMount(){

varself=this;

varn=0;

// 调用 Store 文件夹里边的

console.log(Store.storeNum,'store_num-------');

}

hanldChangeOid(){

this.props.GStore.changeOid(this.props.GStore.oid+1);

}

render(){

return(

Hello,world!

{this.props.GStore.oid}

点我!

);

};

}

exportdefaultLoginComponent;

来源: http://www.qdfuns.com/article/49219/97df461ff8a021f030763be5797be607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值