alibaba / formily

📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3
https://formilyjs.org/
MIT License
11.12k stars 1.44k forks source link

[Bug Report] "@formily/core": "^2.2.0"不应该被放置在dependencies中 #3982

Closed xuanxuan321 closed 10 months ago

xuanxuan321 commented 10 months ago
### Steps to reproduce
 使用 formliy 的时候,项目一般的都会自行安装@formily/ core,当安装@formily/antd-v5时,@formily/antd-v5的node_modules又会有一份@formily/core,
在如下的场景中会出现问题
import React, { useMemo } from 'react'
import { createBehavior, createResource } from '@designable/core'
import { createForm } from '@formily/core'
import { observer } from '@formily/react'
import { Form as FormilyForm } from '@formily/antd-v5'
import { usePrefix, DnFC } from '@designable/react'
import { AllSchemas } from '../../schemas'
import { AllLocales } from '../../locales'
import './styles.less'

export const Form: DnFC<React.ComponentProps<typeof FormilyForm>> = observer(
  (props) => {
    const prefix = usePrefix('designable-form')
    const form = useMemo(
      () =>
        createForm({
          designable: true,
        }),
      []
    )
    return (
      <FormilyForm
        {...props}
        style={{ ...props.style }}
        className={prefix}
        form={form}
      >
        {props.children}
      </FormilyForm>
    )
  }
)

Form.Behavior = createBehavior({
  name: 'Form',
  selector: (node) => node.componentName === 'Form',
  designerProps(node) {
    return {
      draggable: !node.isRoot,
      cloneable: !node.isRoot,
      deletable: !node.isRoot,
      droppable: true,
      propsSchema: {
        type: 'object',
        properties: {
          ...(AllSchemas.FormLayout.properties as any),
          style: AllSchemas.CSSStyle,
        },
      },
      defaultProps: {
        labelCol: 6,
        wrapperCol: 12,
      },
    }
  },
  designerLocales: AllLocales.Form,
})

Form.Resource = createResource({
  title: { 'zh-CN': '表单', 'en-US': 'Form' },
  icon: 'FormLayoutSource',
  elements: [
    {
      componentName: 'Field',
      props: {
        type: 'object',
        'x-component': 'Form',
      },
    },
  ],
})

此时在@formily/antd-v5的 Form 中使用useForm()是拿不到值的,因为createForm和@formily/antd-v5依赖了不同'@formily/core'实例

What is expected?

"@formily/core": "^2.2.0"不应该被放置在dependencies中

What is actually happening?

"@formily/core": "^2.2.0"被放置在 了dependencies中

Package

@formily/antd-v5@2.2.29


xuanxuan321 commented 10 months ago

提重复了

xuanxuan321 commented 10 months ago

提重复了