Git Product home page Git Product logo

vanex's Introduction

vanex

NPM

github

Vanex 是基于 mobx 的 React 数据流管理框架,旨在借助 mobx 提供的基础能力,帮助用户组织更大规模的 React 项目。

文档

https://alibaba.github.io/vanex/

Quick Start

Vanex 提供两个简洁的 API:@vanex 和 start

import React from 'react';
import { vanex, start } from 'vanex';
import axios from 'axios';

const model = {
    name: 'my',

    // 数据部分
    data: {
        name: 'abc'
    },

    // 异步请求部分
    effects: {
        async getName(arg) {
            try {
                const res = await axios.get(`/user?ID=${arg}`);

                if(res.success && res.data) {
                    // set方法会自动触发UI渲染
                    this.set({
                        name: res.data.name
                    });
                }
            } catch(e) {
                alert(e.message);
            }
        }
    },
};

@vanex('my')
class Comp extends React.Component{
    constructor() {
        super(...arguments);
    }

    componentWillMount() {
        // 异步请求数据
        this.my.getName('test');
    }

    render() {
        const { name } = this.my.toJS();

        return (
            <div>
                {name}
            </div>
        );
    }
}

start({
    component: Comp,
    container: '#root', // 要渲染的父节点,不传start方法会返回一个React组件
    models: {
        my: model,
    }
});

See more: https://alibaba.github.io/vanex/quick-start.html

说明

  • mobx是基于Object.defineProperties()(无法监听新增属性)实现的,所以会导致:如果在model的data里没有预先设置某项值,后面对该值做改动的时候就不会触发UI的重新渲染,解决方案:调用React刷新UI的API,手动触发UI更新:this.foreceUpdate()
  • ES7 decorator语法的编译需要babel插件支持:babel-plugin-transform-decorators-legacy
  • mobx会对我们存储的数据做一层包装,以实现对get/set的订阅,所以我们在控制台打印某个数据的时候,会打印出被包装了的对象,这时,我们可以调用toJS()方法来获取原来未被包装的数据,比如我们想获取名为home的model的account对象: {name: 'home', data: {account: {id: 1}}},则可以执行:const { account } = this.home.toJS();或者const { account } = this.props.home.toJS(),会正常输出:{id: 1}

TODO

  • 修复autorun里执行effects里的方法会导致死循环的问题;

vanex's People

Contributors

xcodebuild avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vanex's Issues

根本用不了

这个repo感觉好多bug。

在next.js上跑不起来,create-react-app也跑不起来,umijs也跑不起来。。。

这库根本不能用😓

Vanex + ReactNavigation android下的问题

首先说明下在iOS中是OK的,如下图
ios

在android下,如下图错误

android-error

然后在android下开启debugger模式,出现白屏,chrome里出现奇怪的问题,如下图

android-white

android-debugger

代码很简单如下
package.json

    "dependencies": {
	"react": "16.0.0",
	"react-native": "0.50.3",
	"react-navigation": "^1.0.0-beta.21",
	"vanex": "^1.0.11"
    }

ios和android使用同一入口文件 App.js

class App extends Component {
  constructor(props) {
    super(props);

    // 这里做相关初始化工作
  }
  render() {
    return <AppNavigator />;
  }
}

export default start({
  component: App,
  models: models
});

models.js

import home from './home';
import user from './user';
import chat from './chat';

export default {
	home,
	user,
	chat
};

models中的这三个内容一样,也很简单,home.js,user.js,chat.js

export default {
	name: 'home', // user.js中是 user, chat.js 中此处是chat
	data: {},
	computed: {},
	syncs: {},
	effects: {},
	autorun: {}
};

AppNavigator.js

const AppNavigator = new StackNavigator(
	{
		Home: { screen: Home },
		Chat: { screen: Chat }
	},
	{}
);

export default AppNavigator;

最后提供下源码工程
VanexReactNavigation.zip

由于文件大小限制,RN工程下的 android 和 ios 目录已删除。

求解答,我现在的工程和这个demo结构一样,遇到这样的问题。

关于 relation 的说明太少了

关于
relation.listen
relation.init
的文档没说清楚用途,我从examples里看到listen 里使用了

relation.listen(`
  ## comment
  user.login | filter1 => filter2 | todos.getByUserId
`);

这块没理解主要用途是什么。
我以前使用的是 mobx 来管理RN 状态,现在使用 vanex 管理,vanex 真的比 mobx简单多了,代码量也少了,逻辑和页面也很好的分离了,感谢作者。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.