vuex-iframe-share
v1.0.10
Published
This is a package for data synchronization of vuex data in iframe in the vuejs project
Maintainers
Readme
Introduce
Engineers who use vuejs should know what vuex is! It is an essential tool in actual development. But when we use vuejs + iframe to develop applications, we will find that data communication is a headache. You need to use postMessage every time. To solve this problem, vuex-iframe-share is born. Let the vuex in the current day's Vue and the vuex in iframe share data. If your iframe doesn't use vuejs, it doesn't matter, vuex-iframe-share will store the data in the window.(local|session)Storage In.
✨ Characteristic
- Automated
- Real time change
- Customizable
🔔 Updated
- perf:
store.stateupdateValue === originalValue situation, Thesetfunction will no longer be triggered to prevent abuse of thewatch(v1.0.10) - fix:added
window.parantcheck to prevent use in non iframes, which may lead to deadlock (v1.0.10) - fix:optimized refresh method execution does not pass notifications to iframe (v1.0.9)
- fix:Cancel 100ms delay transmission optimization, because delay may cause data not to be updated in time (v1.0.8)
- fix:
state.set('module/data', ...): Uncaught TypeError: Cannot read property 'module' of null(v1.0.7) - feat:working with
vuex-persistedstate, new optionmutationMethodName(v1.0.6) - fix:
vuexIframeShare.storageerror reporting for null(v1.0.5) - Intact Updated Docs
🔧 Requirements
What is worth understanding is the principle of usingwindow.postMessage, it has some limitations to note. For example, the transmission size and so on. There are references below
🔧 Installation
CDN
<script src="https://cdn.jsdelivr.net/npm/vuex-iframe-share/dist/vuex-iframe-share.umd.min.js"></script>NPM
npm install --save vuex-iframe-shareYARN
yarn add vuex-iframe-share📦 Method
vuexIframeShare.parant(option)
vuexIframeShare.child(option)
vuexIframeShare.storage(option)Params
option: {
// share # mutual transmission (default)
// single # receive only and not send
mode?: 'single' | 'share'
only?: string[] // receive only the specified keys,It also includes the modules name, because the modules name is also stored in the state
// This parameter is only available in vuexIframeShare.storage Valid in.
// In vuejs, please use such as: `vuex-persistedstate ...` package
storage?: Storage // sessionStorage | localStorage (default)
mutationMethodName?: string // It will only take effect if it is used in conjunction with 'vuex-persistedstate'
}Usage
In VueJS
import vuexIframeShare from "vuex-iframe-share";
const store = new Vuex.Store({
state: {
...
},
plugins: [vuexIframeShare.parant()]
});In IFrame(vuejs)
import vuexIframeShare from "vuex-iframe-share";
const store = new Vuex.Store({
state: {
...
},
plugins: [vuexIframeShare.child()]
});In IFrame(not vuejs)
import vuexIframeShare from "vuex-iframe-share";
// Mount
const state = vuexIframeShare.storage();
// Getter or Modules Getter
const vuexData = state.get()
const data = state.get('data')
const moduleData = state.get('moduleName/data')
// Setter or Modules Setter
state.set('data', here is to save the data)
state.set('moduleName/data', here is to save the data)
// It is worth mentioning that after setter, there are the latest vuex results, so we can do this:
const vuexData = state.set('data', here is to save the data)
// You can also use structure assignment
const { ... } = state.set('data', here is to save the data)Working with vuex-persistedstate
What is vuex-persistedstate ?
- Simply put, it is to synchronize and persist the data of vuex in
(local|session)Storageor other storage methods so that it can be used again after refreshing - The details are not explained here. You can go to check:vuex-persistedstate
What are the current problems?
The data synchronized by vuex-iframe-share is only synchronized to memory, and no update is stored in storage,This is not bug,This is related to the update mechanism of vuex-persistedstate. We can do this to solve this problem
// in `store.js`
import vuexIframeShare from "vuex-iframe-share";
const store = new Vuex.Store({
mutations: {
// Add refresh method here, recommended use Object.assign
save(state, payload) {
Object.assign(state, payload)
}
...
},
plugins: [
//In principle, let 'vuex iframe share' execute once store.commit ('save ', {}), execution will trigger the update!
//Note: there is a value when executing 'Save': '{}' if you write like me above, you don't need to do any processing, otherwise you need to filter '{}'
//Or write it in the module: 'modulename / save', of course, it doesn't make any difference, just to trigger the refresh
vuexIframeShare.parant({ mutationMethodName: 'save' })
]
});
If you find any problem, you can give me the issue feedback in GitHub. I will reply after receiving it. Thank you for using this plug-in
