Socket.io -bindings vir Vue.js en Vuex
Vue-Socket.io-Uitgebrei
Socket.io bindings vir Vue.js en Vuex (geïnspireer deur Vue-Socket.io )
Kenmerke
- Liggewig en afhanklik - slegs 2 kb min gzip
- Reaktiewe eienskappe | _+_ | en | _+_ |
- Luister en gee uit | _+_ | gebeure binne komponente
- Stuur handelinge en mutasies outomaties in verskeie Vuex-modules met 'n ruim ruimte op | _+_ | gebeure
- Goeie TypeScript -ondersteuning (versierder en tik)
- Kan gebruik word met enige weergawe van | _+_ |
- Pasgemaakte opsies - pas die biblioteek aan om beter by u projekbehoeftes te pas
- ens ...
Ons ondersteun slegs blaaiers met wêreldwye gebruiksstatistieke groter as 1% en laaste 2 weergawe van elke blaaier (maar nie dooie blaaiers nie). Biblioteek werk moontlik ook in 'n ouer blaaier, maar ons waarborg dit nie. Miskien het u addisionele polyfillers nodig om dit te laat werk.
Motivering
Ek het gebruik $socket.connected
vir 'n paar maande. Ek het van die idee gehou, maar hoe meer ek dit gebruik het, hoe meer het ek te doen gekry met foute, verouderde dokumentasie, gebrek aan ondersteuning, afwesigheid van toetse en 'n groot aantal probleme. Dit het die ontwikkeling van die produk waarmee ek gewerk het, vertraag. Dus het ek besluit om my eie vurk te skep met al die gewenste dinge (funksies/regstellings/toetse/ondersteuning/CI -tjeks, ens.). Dit is hoe | _+_ | is gebore.
As u wil help - skep 'n probleem of PR. Ek sal bly wees om enige bydrae te sien. Kom ons maak die wêreld 'n beter plek
Voorvereistes
Jy moet hardloop Socket.IO bediener voordat u met enige Vue/Socket.IO -projek begin! Instruksies vir die bou van 'n Node/Socket.IO -bediener word gevind hier .
Sagtewarevereistes
- Vue.js
$socket.disconnected
- Socket.io-kliënt
socket.io
- Vuex | _+_ | (opsioneel)
Installasie
socket.io
Inisialisering
socket.io-client
Let wel: jy moet instansie van | _+_ | as tweede argument om duplisering van biblioteek te voorkom. Lees meer hier .
python 3 bedrogblad 2020
Vue-Socket.io
Gebruik
Op Vue.js -komponent
Definieer u luisteraars onder | _+_ | afdeling en hulle sal ooreenstemmende | _+_ | gebeure outomaties.
vue-socket.io-extended
Let op : Moenie pylfunksies vir metodes of luisteraars gebruik as u | _+_ | gebeure binne. U sal uiteindelik verkeerde _ _ _ gebruik. Meer inligting hieroor hier
Skep 'n nuwe luisteraar
>=2.X
Verwyder bestaande luisteraar
>=2.X
| _+_ | en | _+_ | reaktief is. Dit beteken dat u dit in uitdrukkings kan gebruik
>=2.X
Of voorwaardes
npm install vue-socket.io-extended socket.io-client
Of berekende eienskappe, metodes en hake. Behandel dit as berekende eienskappe wat in alle komponente beskikbaar is
Vuex winkelintegrasie
Stel op
Om Vuex -integrasie op te stel, slaag die winkel as die derde argument. In 'n Vue CLI -projek kan u dit doen in die | _+_ | lêer. Voorbeeld:
import VueSocketIOExt from 'vue-socket.io-extended'; import io from 'socket.io-client'; const socket = io('http://socketserver.com:1923'); Vue.use(VueSocketIOExt, socket);
Ontvangs van geleenthede
Mutasies en aksies word outomaties in die Vuex -winkel gestuur of gepleeg wanneer 'n socket -gebeurtenis opdaag. 'N Mutasie of aksie moet die benoemingskonvensie hieronder volg om 'n socket -gebeurtenis te herken en te hanteer.
- AAN mutasie moet begin met | _+_ | voorvoegsel en gaan voort met 'n hoof weergawe van die gebeurtenis
- 'N aksie moet begin met | _+_ | voorvoegsel en gaan voort met die camelcase -weergawe van die gebeurtenis
Bedienergeleentheid | Mutasie | Aksie |
---|---|---|
socket.io-client | var socket = io('http://socketserver.com:1923'); Vue.use(VueSocketIOExt, socket); | sockets |
socket.io | new Vue({ sockets: { connect() { console.log('socket connected') }, customEmit(val) { console.log('this method was fired by the socket server. eg: io.emit('customEmit', data)') } }, methods: { clickButton(val) { // this.$socket.client is `socket.io-client` instance this.$socket.client.emit('emit_method', val); } } }) | socket.io |
this | this.$socket.$subscribe('event_name', payload => { console.log(payload) }); | this.$socket.$unsubscribe('event_name'); |
$socket.connected | $socket.diconnected | {{ $socket.connected ? 'Connected' : 'Disconnected' }} |
Kyk die Konfigurasie afdeling as u 'n pasgemaakte transformasie wil gebruik.
Kyk die Migrasie vanaf VueSocketIO afdeling as u aksiename in UPPER_CASE wil behou.
You are disconnected
Uitstuur van gebeure
Gebeurtenisse kan gestuur word na die Socket.IO bediener deur te bel | _+_ | van 'n Vuex -mutasie of -aksie. Mutasie- of aksiename is nie onderworpe aan dieselfde naamvereistes as hierbo nie. Meer as een argument kan ingesluit word. Alle seriële datastrukture word ondersteun , insluitend buffer.
src/main.js
Vuex -modules op naam
Modules op naams word out-of-the-box ondersteun. Enige mutasie of aksie met die regte naam moet werk, ongeag of dit in 'n module of in die hoof Vuex-winkel is.
import VueSocketIOExt from 'vue-socket.io-extended'; import io from 'socket.io-client'; import store from './store' const socket = io('http://socketserver.com:1923'); Vue.use(VueSocketIOExt, socket, { store });
Bogenoemde kode sal:
- Pleeg die | _+_ | mutasie in die | _+_ | module
- Pleeg die | _+_ | mutasie in die | _+_ | module
- Stuur die | _+_ | aksie in die | _+_ | module
ECMAScript / TypeScript -versierder (bygevoeg in v4)
Vereis : ECMAScript stadium 1 versierders . As u Babel gebruik, babel-plugin-transform-decorators-legacy word benodig. As u TypeScript gebruik, aktiveer | _+_ | vlag.
wat is mbtc bitcoin
Dit ondersteun nog nie die fase 2 -versierders nie, aangesien hoofstroom -transpilers nog steeds na die ou versierders oorgedra word.
Ons bied | _+_ | versierder vir gebruikers van klas-styl Vue-komponente . By verstek, | _+_ | versierder luister na dieselfde gebeurtenis as versierde metode naam, maar u kan persoonlike naam gebruik deur 'n tou binne -in versierder te plaas, bv. | _+_ |.
Kyk na die voorbeeld hieronder:
SOCKET_
Gebruik met Nuxt.js
Die belangrikste punt hier is om SSR vir die inprop uit te skakel, aangesien dit andersins sal neerstort. Dit is 'n welbekende probleem en ons gaan dit regstel. Dankie Antwoord op @The_Gamer vir ondersoek.
hoe om 'n webwerf te skep met behulp van javascript
1. Skep inprop :
socket_
2. Registreer dit dan :
chat message
Gebruik met Quasar Framework
Registreer vue-socket.io-uitgebrei met 'n opstartlêer en skakel die weergawe van die bediener uit
1. Skep bootlêer :
SOCKET_CHAT MESSAGE
2. Registreer dit dan :
socket_chatMessage
Konfigurasie
Benewens winkelvoorkeure, | _+_ | aanvaar ander opsies. Hier is hulle:
Opsie | Tik | Verstek | Beskrywing |
---|---|---|---|
chat_message | SOCKET_CHAT_MESSAGE | socket_chatMessage | Vuex -winkel -instansie maak vuex -integrasie moontlik |
chatMessage | SOCKET_CHATMESSAGE | socket_chatMessage | Maak vooraf by die gebeurtenisnaam terwyl u die gebeurtenis in aksie omskakel. Leë string deaktiveer voorvoegsel |
CHAT_MESSAGE | SOCKET_CHAT_MESSAGE | socket_chatMessage | Gebruik die gebeurtenisnaam terwyl u die gebeurtenis na mutasie omskakel. Leë string deaktiveer voorvoegsel |
// In this example we have a socket.io server that sends message ID when it arrives // so to get entire body of the message we need to make AJAX call the server import Vue from 'vue' import Vuex from 'vuex' // `MessagesAPI.downloadMessageById` is an async function (goes to backend through REST Api and fetches all message data) import MessagesAPI from './api/message' Vue.use(Vuex); export default new Vuex.Store({ state: { // we store messages as a dictionary for easier access and interaction // @see https://hackernoon.com/shape-your-redux-store-like-your-database-98faa4754fd5 messages: {}, messagesOrder: [] }, mutations: { NEW_MESSAGE(state, message) { state.messages[message.id] = message; state.messagesOrder.push(message.id); } }, actions: { socket_userMessage ({ dispatch, commit }, messageId) { // { commit('NEW_MESSAGE', message); }) } } }) | this._vm.$socket.client.emit actions: { emitSocketEvent(data) { this._vm.$socket.client.emit('eventName', data); this._vm.$socket.client.emit('with-binary', 1, '2', { 3: '4', 5: new Buffer(6) }); } } | hooffunksie | Bepaal hoe gebeurtenisnaam na mutasie omgeskakel word |
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); const messages = { state: { messages: [] }, mutations: { SOCKET_CHAT_MESSAGE(state, message) { state.messages.push(message); } }, actions: { socket_chatMessage() { console.log('this action will be called'); } }, }; const notifications = { state: { notifications: [] }, mutations: { SOCKET_CHAT_MESSAGE(state, message) { state.notifications.push({ type: 'message', payload: message }); } }, }; export default new Vuex.Store({ modules: { messages, notifications, } }) | SOCKET_CHAT_MESSAGE messages | kameelkas funksie | Bepaal hoe gebeurtenisnaam na aksie omgeskakel word |
FYI: U het altyd toegang tot die standaard plugin-opsies as u dit nodig het (bv. Hergebruik standaard | _+_ | funksie):
SOCKET_CHAT_MESSAGE
Migrasie vanaf VueSocketIO
Vir almal wat van die ou pakket VueSocketIO na die nuwe pakket oor die bestaande projek gemigreer het. U moet twee parameters herdefinieer, sodat u ou winkelhandelingname soos SOCKET_EVENT_NAME kan gebruik.
notification
FAQ
-
Hoe om 'n gebeurtenis van die bediener na die spesifieke gebruiker te ontvang/uit te stuur? (kyk ook hierdie )
-
Hoe kry u toegang tot hierdie. $ -Aansluiting vanaf Vuex -aksies?
-
Mutasies en aksies word nie afgevuur tydens die gebruik van Quasar nie
Beleid oor semantiese weergawe
Hierdie inprop volg semantiese weergawe .
Wysigingslys
Ons gebruik GitHub vrystellings .
Bydrae
Ons is meer as bly om moontlike bydraes te sien, so moet asseblief nie huiwer nie. As u voorstelle, idees of probleme het, kan u dit nuut byvoeg uitgawe , maar maak eers seker dat u vraag nie die vorige vrae herhaal nie.
sql onderhoudsvrae facebook
Aflaai besonderhede:
Skrywer: probleem
Regstreekse demonstrasie: https://codesandbox.io/s/oxqpm54pnq?fontsize=14&module=/src/App.vue
GitHub: https://github.com/probil/vue-socket.io-extended
#vuejs #vue #javascript #vue-js