vuex-socketio
vuex-socketio
Vuex plugin for Socket.io-client.
Install
npm install vuex-socketio --save
Usage
Configuration
One socket.io-client instance
import createSocketIoPlugin from 'vuex-socketio';
const socket = socketio('http://socketserver.com:3001');
const socketPlugin = createSocketIoPlugin(socket);
With namespace:
import createSocketIoPlugin from 'vuex-socketio';
const socket = socketio('http://socketserver.com:3001');
const socketNsp = socketio('http://socketserver.com:3001/namespace');
const socketPlugin = createSocketIoPlugin([socket, socketNsp]);
In store:
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
...
},
plugins: [socketPlugin]
})
Vuex Store integration
Set up listeners
You may define prefix for socket.on with options object:
const socketPlugin = createSocketIoPlugin(socket, {onPrefix: 'someOnPrefix'});
The default value is socketOn
mutations: {
socketOnConnect: (state, status ) => {
state.connect = true;
},
socketOnMessage: (state, message) => {
state.message = message;
},
...
},
actions: {
socketOnOtherMessage: (context, message) => {
...some code here
},
...
}
Where socketOn is a prefix for listeners and message is a desired channel name
Set up emiters
Only actions can be used for emitting to socket
Define socket.emit prefix:
const socketPlugin = createSocketIoPlugin(socket, {emitPrefix: 'someEmitPrefix'});
Or use the default value: socketEmit
actions: {
socketEmitMessage: (context, message) => {},
...
}
Where socketEmit is a prefix for emitting messages and message is a desired channel name
Open and close socket connection
Use: socketConnect && socketDisconnect actions
You can also add some prefixes for default functions, e.g.: socketReconnect,
where socket is a mandatory prefix and reconnect is an existing function name
const socketPlugin = createSocketIoPlugin(socket, {defaultFunctions: ['socketReconnect']);
Set up channel name formatter
You can provide your own channel converter function:
const socketPlugin = createSocketIoPlugin(socket, {converter: _.camelCase});
The default channel name will be in UPPER_SNAKE_CASE
Namespaces for store modules and for socket instances are supported.
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
export default new Vuex.Store({
state: {
connect: false,
message: null
},
mutations:{
socketOnConnect: (state, status ) => {
state.connect = true;
},
socketOnDisconnect: (state, status ) => {
state.connect = false;
},
socketOnMessage: (state, message) => {
state.message = message;
}
},
actions: {
socketConnect: () => {},
socketEmitMessage: () => {},
socketOnOtherMessage: (context, message) => {
...some code here
},
},
plugins: [socketPlugin]
})
Socket instance with namespace:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
export default new Vuex.Store({
state: {
connect: false,
message: null
},
mutations:{
namespaceSocketOnConnect: (state, status ) => {
state.connect = true;
},
namespaceSocketOnDisconnect: (state, status ) => {
state.connect = false;
},
namespaceSocketOnMessage: (state, message) => {
state.message = message;
}
},
actions: {
namespaceSocketConnect: () => {},
namespaceSocketEmitMessage: () => {},
namespaceSocketOnOtherMessage: (context, message) => {
...some code here
},
},
plugins: [socketPlugin]
})
Notes
No support for dynamic registred store modules.
Plugin emits first to the socket channel and then it calls related Vuex store action.
Example
Related Packages
Socket.io bindings for Vue.js and Vuex (inspired by Vue-Socket.io)
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.3.7 | ^2.5.17 | MIT | |
| 0.3.6 | ^2.5.17 | MIT | |
| 0.3.5 | ^2.5.17 | MIT | |
| 0.3.4 | ^2.5.17 | MIT | |
| 0.3.3 | ^2.5.17 | MIT | |
| 0.3.2 | ^2.5.17 | MIT | |
| 0.3.1 | ^2.5.17 | MIT | |
| 0.3.0 | ^2.5.17 | MIT | |
| 0.2.2 | MIT | ||
| 0.2.1 | ^2.5.17 | MIT | |
| 0.2.0 | MIT | ||
| 0.1.1 | MIT | ||
| 0.1.0 | MIT | ||
| 0.0.9 | MIT | ||
| 0.0.8 | MIT | ||
| 0.0.7 | MIT | ||
| 0.0.6 | MIT | ||
| 0.0.5 | MIT |