-
-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] mobx-vue v3 #60
Comments
vote for idea 2, but don't need to support decorator any more. |
yes,idea 2 is good,and there some different idea, <script>
import { observer } from 'mobx-vue';
export default observer({
setup() {
// balabala
}
});
</script>
<!-- use <script setup> -->
<script setup>
import { observer } from 'mobx-vue';
export const state= observer({
// balabala
})
//or
export default observer({
// balabala
})
</script> |
|
Please don't deprecate vue-class-component support. It's the only reason I use mobx-vue. If you want to support composition API in addition to classes that would be fine. You could release the composition support now and do another release later when vue-class-component finalizes v3 support. |
@steven-sheehy Wow, I really don't know vue-class-component support is so important for you. I get your feedback and rethink vue-class-component support. |
I would really like to use |
但是我感觉吧,vue3的类hook特性,使得store层变得不是特别刚需 |
vue3.0 不需要mobx,vue自带的reactivity可以完全替代掉mobx。 // store
export class BaseStore {
constructor() {
return reactive(this);
}
}
// module like
class UserStore extends BaseStore {
name = ''
}
export const user = new UserStore()
// index
export class StoreCenter extends BaseStore {
token = ''
user = user
}
export const store = new StoreCenter();
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$store: StoreCenter
}
}
export default {
install: (app: App) => {
app.config.globalProperties.$store = store
}
} 在component中用 |
I vote for:
|
Also some food for thought of how mobx-jsx handels this: |
别启用 类语法和装饰器吧。类语言可以很好地封装继承,装饰器是未来趋势,而且很好用 |
我觉得也是。class 语法对于后端开发人员真的非常友好,我就是一个写过C# ,Java 后面转型js 的在搭建工程时会用后端开发模式把React,Vue设计成后端工程结构,后面后端开发人员都不需要懂React,Vue这些都能很好修改代码,专注业务 |
I'm currently using MobX 6 with Vue 3. Here is the plugin I wrote (it's actually Quasar boot file): import { ComponentPublicInstance } from '@vue/runtime-core'
import { Reaction } from 'mobx'
import { boot } from 'quasar/wrappers'
const reactionKey = '__mobx_reaction__'
interface MobxComponent extends ComponentPublicInstance {
[reactionKey]: Reaction
}
function getComponentName(vm: ComponentPublicInstance) {
// @ts-ignore
return (vm.$options.name || vm.tag || '<observed-component>') as string
}
export default boot(({ app }) => {
app.mixin({
created(this: MobxComponent) {
const name = getComponentName(this)
const reaction = new Reaction(`${name}::mobx-reaction`, () => {
if (this.$.isMounted) {
this.$forceUpdate()
}
})
this[reactionKey] = reaction
// @ts-ignore
const originalRender = this.$.render
// @ts-ignore
this.$.render = function(...args: any) {
let renderResult: unknown
reaction.track(() => {
renderResult = originalRender.call(this, ...args)
})
return renderResult
}
},
beforeUnmount(this: MobxComponent) {
this[reactionKey].dispose()
},
})
}) |
Hey just released a really simple mobx-react-lite inspired library for Vue 3 https://github.com/wobsoriano/mobx-vue-lite
|
@wobsoriano Are you interested in mobx-vue v3 design ? or do you want transfer your mobx-vue-lite to mobxjs org ? It looks like good (mobx-vue-lite), but no test case ci, so we can do it better. what's your opinion ? |
I'm fine moving it to mobxjs org |
有一个很神奇的现象。就是在v3里面的 mobx 类 @Options({
components: {},
})
export default class Home extends Vue {
System=new SystemController();
}
//或者
config.globalProperties.System = reactive(new SystemController()) 仓库地址:https://github.com/LengYXin/mamba/tree/dev/packages/micro https://github.com/LengYXin/mamba/blob/dev/packages/micro/src/components/user.vue |
closed via mobxjs/mobx-vue-lite#1 |
Introduction
Since mobx v6 and vue v3 was released for a while, it's time to support mobx v6 and vue v3.
Current Feature Request
Vue 3 Compatibility #50
Module Browser Build #49
Can I use mobx-vue without decorated class properties? #47
Add Documentation re Optimizing Rendering #36
Nuxt support #26 #32
Deprecate vue-class-component
Thoughts about mobx-vue #3 (comment)
vue-class-component has their own problem
vuejs/vue-class-component#406
Naive proto design (only for vue3)
No.1 idea
export a vue plugin for vue3
Using Observer Component in your app
No.2 idea
export a
observer
function to hack vueexport default
, no need to install as plugin, you can use it directly.But it not easy to do this , we need hack the vue @internel (e.g.
$
,$options
,$forceUpdate
)And when you use
<script setup>
, it's also diffcult to implement a usefulobserver
function.(any suggestion for this welcome)No.3 idea
add the template sugar like
<template pug>
,<template functional>
.It looks like best solution for mobx-vue and vue sfc? But it need mobx-vue maintainer to maintian different tools to support this feature. (e.g.
mobx-vue-loader
forwebpack
,rollup-plugin-mobx-vue
forvite
androllup
, ...etc). Not a reliable choice i think. I didn't see any api allow us to change the<template>
behavior. It's parsed by@vue/compiler-sfc
and no public api.My opinion
Deprecate
vue-class-component
and makevue sfc
as first class support.Summary
Any idea and disscussion welcome, maybe you can design the final mobx-vue v3 api.
The text was updated successfully, but these errors were encountered: