flux-constant
Unique constants for Flux apps.Install
$ npm install flux-constant
Usage
Create constants one at a time.var FluxConstant = require('flux-constant');
var IMPORTANT_THING = new FluxConstant('IMPORTANT_THING');
console.log(IMPORTANT_THING);
// { name: 'IMPORTANT_THING' }
console.log(IMPORTANT_THING.toString());
// IMPORTANT_THING
Or create a set of them.
var FluxConstant = require('flux-constant');
var Set = FluxConstant.set([
'SEND_REQUEST',
'RECEIVE_RESPONSE'
]);
console.log(Set);
/*
{
SEND_REQUEST: { name: 'SEND_REQUEST' },
RECEIVE_RESPONSE: { name: 'RECEIVE_RESPONSE' }
}
*/
console.log(Set.SEND_REQUEST instanceof FluxConstant);
// true
Why
With a Flux application you may have a set of constants such as:var ContactConstants = {
ActionTypes: {
SEND_REQUEST: 'SEND_REQUEST',
RECEIVE_RESPONSE: 'RECEIVE_RESPONSE'
}
};
module.exports = ContactConstants;
You may have another set of constants that are really similar, but unreleated.
var SignupConstants = {
ActionTypes: {
SEND_REQUEST: 'SEND_REQUEST',
RECEIVE_RESPONSE: 'RECEIVE_RESPONSE'
}
};
module.exports = SignupConstants;
We just created action types that could collide though. Let's compare a bit:
var ContactConstants = require('./ContactConstants');
var SignupConstants = require('./SignupConstants');
ContactActionTypes = ContactConstants.ActionTypes;
SignupActionTypes = SignupConstants.ActionTypes;
console.log(ContactActionTypes.SEND_REQUEST === SignupActionTypes.SEND_REQUEST);
// true
That's not exactly what we wanted. This could bite us if we use these two sets of constants in the same process.
For example, if a Flux store was depending on these constants, it may take action on a payload it didn't intend to. This happens because we're just comparing strings.
One way to fix this is creating longer, more unique names:
var ContactConstants = {
ActionTypes: {
CONTACT_SEND_REQUEST: 'CONTACT_SEND_REQUEST',
CONTACT_RECEIVE_RESPONSE: 'CONTACT_RECEIVE_RESPONSE'
}
};
module.exports = ContactConstants;
This doesn't seem like a great way to move forward though. These names can get out of control as the application grows. Also, prefixing with
CONTACT_
feels
like duplicating unnecessary information.So instead of passing around strings let's create objects that are unique (
new
). And best of all we can keep the simpler naming conventions.var FluxConstant = require('flux-constant');
var ContactConstants = {
ActionTypes: {
SEND_REQUEST: new FluxConstant('SEND_REQUEST'),
RECEIVE_RESPONSE: new FluxConstant('RECEIVE_RESPONSE')
}
};
module.exports = ContactConstants;
We'll do the same thing as above but demonstrate the
set
shortcut.var FluxConstant = require('flux-constant');
var SignupConstants = {
ActionTypes: FluxConstant.set([
'SEND_REQUEST',
'RECEIVE_RESPONSE'
])
};
module.exports = SignupConstants;
And now they won't collide.
var ContactConstants = require('./ContactConstants');
var SignupConstants = require('./SignupConstants');
ContactActionTypes = ContactConstants.ActionTypes;
SignupActionTypes = SignupConstants.ActionTypes;
console.log(ContactActionTypes.SEND_REQUEST === SignupActionTypes.SEND_REQUEST);
// false
License
MITDon't forget
What you create withflux-constant
is more important than flux-constant
.