On gists
Simple global state hook aka composable
•
Vue.js
state.js
Raw
#
import { ref, readonly } from 'vue';
const sharedVar = ref(false);
const toggleOutside = () => {
sharedVar.value = !sharedVar.value;
};
export const useTestState = () => {
const toggleInside = () => {
sharedVar.value = !sharedVar.value;
};
return {
sharedVar: readonly(sharedVar),
toggleOutside,
toggleInside,
};
};
<template>
<div>A</div>
<div>sharedVar: {{ sharedVar }}</div>
<button @click="toggleOutside">toggle outside</button>
<button @click="toggleInside">toggle inside</button>
</template>
<script>
import { useTestState } from '../state';
export default {
name: 'A',
setup() {
const { sharedVar, toggleOutside, toggleInside } = useTestState();
return {
sharedVar,
toggleOutside,
toggleInside,
};
},
};
</script>
<!-- nebo vyvoláme metody driv za prepokladu ze state.js nebude sharedVar readonly -->
<template>
<div>A</div>
<div>sharedVar: {{ sharedVar }}</div>
<button @click="toggleOutside">toggle outside</button>
<button @click="toggleInside">toggle inside</button>
<button @click="x">x</button>
</template>
<script>
import { useTestState } from '../state';
const { sharedVar, toggleOutside, toggleInside } = useTestState();
export default {
name: 'A',
setup() {
return {
sharedVar,
toggleOutside,
toggleInside,
};
},
methods: {
x() {
sharedVar.value = !sharedVar.value;
},
},
};
</script>
<template>
<div>B</div>
<div>sharedVar: {{ sharedVar }}</div>
<button @click="toggleOutside">toggle outside</button>
<button @click="toggleInside">toggle inside</button>
</template>
<script>
import { useTestState } from '../state';
export default {
name: 'B',
setup() {
const { sharedVar, toggleOutside, toggleInside } = useTestState();
return {
sharedVar,
toggleOutside,
toggleInside,
};
},
};
</script>
demo.txt
Raw
#
https://stackblitz.com/edit/vue-uh1crz?file=src%2FApp.vue,src%2Fcomponents%2FA.vue,src%2Fcomponents%2FB.vue,src%2Fstate.js