react-trim
v5.6.1
Published
MVC/Flux React and Redux Library with additional power.
Downloads
32
Readme
React Trim
Combine React and Redux and you get React Trim. Create powerful front-end applications with less code and better architecture.
Wait until you see the code reduction
React Trim CLI
To install react-trim-cli run:
npm i react-trim-cli -g
Installation
To install react-trim
directly into your project run:
npm i react-trim -S
Loaders
The following loaders are used to reduce code in your application. The react-trim-cli
comes configured and ready for using loaders with the following fiel extensions.
Container Loader: .jsc
Store Loader: .jss
Component Loader: .jscp
JavaScript Component Loader
This is a webpack loader using react-templates. The syntax is much more flexible allowing for javascript code within the template for easier syntax and better code highlighting. It also contains custom code definitions and alias to react-templates (ex. rt-for
alias to rt-repeat
).
webpack.config.js
{
test: /\.jscp$/,
include: paths.appSrc,
use: [
{
loader: "babel-loader",
options: {
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true
}
},
{
loader: "react-trim/loader/component",
options: { modules: "es6" }
}
]
}
JavaScript Store Loader
The following loader allows for creating Redux stores in a more concise way. Class methods are used to define redux cases, actions, and dispatchers. The package also adds more features such as defining helper methods, getters, state observers, and more.
webpack.config.dev.js
{
test: /\.jss$/,
include: paths.appSrc,
use: [{
loader: "babel-loader",
options: {
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true
}
},
"react-trim/loader/store"
]
}
webpack.config.prod.js
{
test: /\.jss$/,
include: paths.appSrc,
use: [
{
loader: 'babel-loader',
options: {
compact: true,
},
},
'react-trim/loader/store',
]
}
JavaScript Container Loader
The following loader allows for creating React/Redux Components in a more concise way. Compontents are stripped of tedious repetitive code in a typical React/Redux project. Classes are wrapped around React and connected to Redux Store and a React Template View automatically given a React Trim Store and React Trim Component.
webpack.config.dev.js
{
test: /\.jsc$/,
include: paths.appSrc,
use: [
{
"babel-loader",
options: {
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true
}
},
"react-trim/loader/container"
]
}
webpack.config.prod.js
{
test: /\.jsc$/,
include: paths.appSrc,
use: [
{
loader: 'babel-loader',
options: {
compact: true,
},
},
'react-trim/loader/container'
]
}
Documentation
The application template is fully documented and contains simple and advance example use cases. You will note the /containers/Example
folder contain javascript without the use of any loaders. The rest of the folders utilities the loaders that are used along with react-trim
.
You can open the inspector in your browser and navigate to the sources path then open the file name while in development mode to see the generated file when using the loader.
Container
Containers are the entry point to stateful components. It couples the Store and Component layers together on entry. They are also capable of binding mutliple Components to the Container which can be references form within the Component layer using the Components
object.
Containers are, also, meant to contain component related logic and state.
Store
The Store is an enhanced version of a redux store: it uses the redux store/reducer along with addition functionality. Essentially it manages its state within a class and then dispatches those changes to redux.
Stores are meant to contain business logic and a shared state accross mutliple Containers.
Component
The Component is only related to view: what the user can see. That is logic should be computed outside the view and passed to the view once completed. Some essential logic lives within the view such as for loops and if statements that are used as tag attributes.
<Tag @if={ condition } />
<Tag @for={ prop, index in object } />