0.1.15 • Published 5 years ago
vvix-cli v0.1.15
vvix-cli
请不要在真实开发下使用 vvix,还未稳定 !!!!!!!!!!!!!!!!!!!!!!!!!
如果你实在喜欢这种写法,请使用Vue3 !!!!!!!!!!!!!!!!!!!!!!!!!
DO NOT USE IN REAL PRODUCT, IT'S STILL NOT STABLE!!!!!!!!!!!!!!!!!!!!
If you really like this style, please use Vue3 !!!!!!!!!!!!!!
轻量级玩具 响应式 JSX/TSX 框架
vvix 可以让你使用:
- ts 支持
- vue 响应式 api 大部分支持
- 更加 vue 的 react,更加 react 的 vue
- 和 vue3 类似的 diff 算法
vvix brings you:
- ts support
- most of "vue" reactive apis
- reactive react, jsx in vue
- more efficient diff algorithm than react
使用/Usage:
挂载 App 根组件到 id 为 root 的 dom 节点上
render App on the dom whose id is "root"
import {createApp} from 'vvix'
const App = () => () =>
  <div>hello world</div>
createApp(<App />).mount("#root")基础的计数器
Simple counter demo
const Counter = () => {
  const counter = ref(0)
  const click = () => {
    counter.value++
  }
  return () => <div onClick={click}>
    counter: {counter.value}
  </div>
}
createApp(<Counter />).mount("#app")组件的嵌套
parent and child components
interface Props {
  title: string;
  content: string;
}
const enum Status {
  Success,
  Pending,
  Fail,
  Normal
}
const Item: FC<Props> = ({ title, content }) => () => (
  <div>
    <h1>{title}</h1>
    <p>{content}</p>
  </div>
);
const MsgItem = () => {
  const [status, data, retry] = useRequest<
    Array<{ id: number; title: string; content: string }>
  >();
  return () => (
    <>
      <button onClick={retry}>retry</button>
      {
        status.value === Status.Pending
        ? "loading..."
        : status.value === Status.Fail
          ? "oops, something wrong !"
          : data.value?.map((item) => (
            <Item
              key={item.id}
              title={item.title}
              content={item.content}
            />
          ))
      }
    </>
  );
};组件传送门(让组件挂载在其它 dom 上)
portal(mount the component on another dom)
import { createPortal } from "vvix";
const Portal = createPortal<{
  msg: string;
}>(({ msg }) => {
  return () => <div>{msg}</div>;
}, "#portal");
const App = () => {
  return () => (
    <div>
      <Portal msg="portal render success" />
    </div>
  );
};Api
createApp
挂载根组件到 dom 上
mount root component on the dom
/*
  nodeOps: an plain object which includes some  platform apis, for example:
  {
    getElement(parent, child) {
      return parent.querySelector(child)
    },
    appendChild(parent, child) {
      parent.appendChild(child)
    },
    ...
  }
  if you just want to render it on the dom, just don't care the second parameter
*/
createApp(vnode: VNode, nodeOps?: NodeOps).mount(container: Dom | string)ref & reactive
ref(value?)
reactive(obj)
const count = ref(0);
count.value++
console.log(cont.value) // update render
const state = reactive({
  list: [],
  users: {}
})
state.list.push({ msg: hello }) // update renderexpose
import {expose, onMounted} from 'vvix'
const Child = () => {
  const count = ref(0)
  expose({
    count: count
  })
  return <div>child</div>
}
const Parent = () => {
  const childComponent = ref()
  onMounted
}作者大学生佛系更新,欢迎提出好的 PR/issue 和 star ^_^
I won't guarantee when will it be finished, welcome you PR, issue and Star ^_^
github: https://github.com/JSerFeng/vvix