ant-design [App] 组件,无法添加一些html元素自带的属性

zqry0prt  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(59)

What problem does this feature solve?

举例,将 component 设置为 html ,若是想要增加 dataset 属性或 lang 属性,无效果,而且ts报错提示。
对于 data-xxx 虽然可以设置,没有错误,但是是无效果的。
不能将类型“{ children: Element; component: string; lang: true; }”分配给类型“IntrinsicAttributes & AppProps”。
类型“IntrinsicAttributes & AppProps”上不存在属性“lang”。ts(2322)

就像下面的代码似的

<App component='html' lang='en' data-xxx='abc'>
....
</App>

What does the proposed API look like?

就是说 App 应该包容性更大一些,不然一些元素自有的属性无法设置

gdx19jrr

gdx19jrr1#

个人主观看法:antd 的 <App /> 组件不应该考虑透属性,api 丢出去以后就不好控制了。

至于你说的这个操作也有另外一种实现方式。比如:

import 'normalize.css';
import React from 'react';
import ReactDOM from 'react-dom/client';
import { App as AntdApp, AppProps as AntdAppProps, Button, ConfigProvider } from 'antd'
import { cx } from 'antd-style'

interface AppProps extends Pick<AntdAppProps, 'style' | 'className'> {

}

const SelfHtml = (props: React.PropsWithChildren<AppProps>) => {
  const { children, className, style, ...rest } = props;
  return (
    <section
      className={cx('self-html', className)}
      style={style}
      {...rest}
      data-test="1"
    >
      {children}
    </section>
  )
};

const App = () => {
  return (
    <Button type="primary">
      Hello Antd
    </Button>
  )
};

ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
  .render(
    <React.StrictMode>
      <ConfigProvider theme={{ token: { colorPrimary: 'blue', }, cssVar: true }}>
        <AntdApp component={SelfHtml}>
          <App />
        </AntdApp>
      </ConfigProvider>
    </React.StrictMode>
  );
pgpifvop

pgpifvop2#

@Wxh16144

确实可行,不过如果官方能在这个基础上,做下调整,能满足我的这个需求的同时,还能避免你说的这个穿透问题,就更好啦。

补充

我发现这样做有个很不好的问题, <App component='html'> 发生一些改变的时候,只有app这个组件的属性变化。

如果使用下面的方式

<App component={(props) => <MyHtml {...props} lang={locale} data-theme={store.xxx} />}>

会导致所有的html结构重新渲染

相关问题