| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
feilong8036
9年前发布

Trux – React.js的一个简单数据框架

来自: https://github.com/rohan-deshpande/trux

Trux

API ⇆ Trux ➝ Components

A simple data framework for React.js

Contents

  • Introduction
  • Why Trux?
  • Installation
  • Files
  • Basic Usage
  • Extending
  • Working with remote data
  • Documentation
  • License (MIT)

Introduction

Trux is an easy, lightweight and effective way of managing mutable data for your client side React.js app.

It allows you to create client side data store objects which contain bindings to React components. These objects do not manage the state of your components, they simply act as interfaces between your data and the client side of your app. Data store changes can be triggered anywhere in your app, these changes will then be broadcast to all of the store's bound components.

In Trux, your data stores are the sources of truth for your app's data dependent React components.

Trux comes packed with a parent object Trux , a Trux.Base class and two data store classes, Trux.Model and Trux.Collection which are designed to be extended for your own use cases.

Trux focuses on inheritance and provides a way to extend Trux.Model or Trux.Collection into sub classes with custom methods & properties.

Checkout the short guide below, the examples and the docs to get an idea of how to use Trux.

Trux was developed for my project management & analytics application, Tr akktion and was inspired by Fl ux concepts. After hashing out the main concepts and developing a working prototype, I felt it was working quite nicely for me and thought others might find it useful, so I decided to turn it into its own thing.

Why Trux?

Trux is super easy to drop into your React app and get your back and front talking to one another in a Flux-like fashion, especially if you have an existing API.

Your app doesn't need to be structured in a specific way, all you need to do is install Trux and then define some models/collections to pass to your components. When you set your RESTful routes up for your data stores, Trux will handle the requesting/broadcasting for you.

If you've already got an app going using Flux or Redux and you're happy with how it works, Trux may not be for you, but if you're looking for a simple way to get unidirectional data flows persisting throughout your app, Trux might be just what you need.

Installation

npm install truxjs  bower install trux

Or simply download the repo and...

<script type="text/javascript" src="/path/to/trux.bundle.min.js"></script>

Files

The following files are included in the dist directory of the package

  • trux.js 100% pure Trux, no dependencies included and unminified
  • trux.min.js Same as the above but minified
  • trux.bundle.js A stable compiled build of Trux which includes its dependencies
  • trux.bundle.min.js Same as the above but minified

Basic Usage

After including Trux in your app, construct a new Trux.Model , pass it some data and bind a component to it, remembering to set the component's appDataDidChange method. Then, render the component into the DOM.

/**   * Construct a new Trux.Model and give it some data containing a message property.   *   */  var MyModel = new Trux.Model({'message':'hello world'});    /**   * Create a React component which will have MyModel passed to it via props.   *   */  var MyComponent = React.createClass({        propTypes: {          model:React.PropTypes.object.isRequired      }        getInitialState:function () {          return {              model:this.props.model          };      },        /**       * Set the component's unique truxId and bind the component to the model.       *       */      componentDidMount:function () {          this.truxId = 'MyComponent'          this.state.model.bindComponent(this);      },        /**       * The method called by Trux's private broadcast method which persists changes in data across bound components.       *       */      appDataDidChange:function () {          this.forceUpdate();      },        /**       * Render the component and display the model's message.       *       */      render:function() {          return <div>{this.state.model.data.message}</div>;      }  });    /**   * Render the component into the DOM   *   */  ReactDOM.Render(      <MyComponent model={MyModel} />,      document.getElementById('app')  );

Now, when you call MyModel.update() after mutating data.message the change will be reflected in MyComponent .

Extending

The power of Trux lies in its use of prototypal inheritance which means that you can extend Trux.Model or Trux.Collection to create extended classes that have custom methods while still maintaining access to the methods and properties of their parent classes. Of course you can then extend your own custom classes into new ones as well.

Let's look at a simple way to do this.

/**   * Create a Trux.Model extension.   * Custom classes should be stored inside the Trux.models or Trux.collections objects for easy reference.   * Give the User model some custom methods.   *   */  Trux.models.User = Trux.Model.extend({      getFullName: function () {          return this.data.firstName + ' ' + this.data.lastName;      }  });    /**   * Declare a new User model and give it some data.   *   */  var Bilbo = new Trux.models.User({      firstName: 'Bilbo',      lastName: 'Baggins'  });    /**   * Call the custom function to get Biblo's full name!   *   */  console.log(Bilbo.getFullName()); // logs Bilbo Baggins

From this short example you can see how we can easily extend Trux classes creating new classes with custom methods for whatever purpose we like.

Working with remote data

Trux was designed to work with a RESTful API. It assumes that your app has one or is working with an existing API, like Parse or Firebase .

The provided methods within both Trux.Model and Trux.Collection do make some assumptions as to how data is being sent back from your API. If this doesn't gel with your setup, you can simply extend these classes and write your own REST methods or alternatively override the base methods yourself.

For more info on how this is achieved, please check the remote.html example which uses Parse and read the docs.

License

Copyright (c) 2016 Rohan Deshpande and other contributors

Licensed under the MIT License

 本文由用户 feilong8036 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1455003994495.html
React JavaScript开发