【问题标题】:Overwriting a single (nested) property when extending a React class扩展 React 类时覆盖单个(嵌套)属性
【发布时间】:2020-02-05 16:30:28
【问题描述】:

我对 React.js 相当陌生,我相信我理解了主要概念,并且我正在努力寻找有关如何覆盖我正在声明的类的单个属性的文档。

在我的一个组件中,我基于来自Ant Design 的类定义了一个新类MyColumn。架构(继承而不是组合)已经由其他人制作,我无法更改。

import { Table } from "antd";
const { Column } = Table;
// ... 
class MyColumn extends Column<Interfaces.myViewEntry> { }   // <---

目前,列标题只是向下流动,我需要省略号(以及带有完整列标签的鼠标悬停)或适当的自动换行。可能后者更容易。

为了达到这个目标,我想为MyColumn 设置属性style: { 'white-space': 'unset' }(并且只是那个属性),因为我读到这将允许我为列标题获得正确的自动换行。

有人可以详细说明在我用&lt;-- 标记的行中的括号中要放入什么吗?

背景

interfaces.tsx 中,我定义了如下内容

export interface myViewEntry{
    LastName: string,
    FirstName: string,
    Result: number,
}

参考文献

【问题讨论】:

  • 当然。我只需要更多信息,您的代码中存在继承吗?这些组件的外观如何?
  • 我刚刚再次检查了代码——我想我必须坚持继承。 :-( MyColumn 之后有一个完整的子类层次结构。所以组合是没有选择的。你还能帮我吗?
  • 这样的继承是个很糟糕的主意。
  • @Dennis Vash:我知道它并不漂亮,但在技术上可行吗?如果是,怎么做?
  • 是的,你可以,请提供一个可重现的例子How to create a Minimal, Reproducible Example(你可以使用这样的codesandbox-antd-template,我会相应地向你展示一个例子。

标签: reactjs class inheritance antd


【解决方案1】:

在我看来,最好将 ant-design 组件与您自己的组件一起包装,并为其添加额外的属性。 例如:

import { Table } from 'antd';

export default function MyTableColumn({ children, ...rest }) {
  //...useState, useRef, useEffect, whatever you need.
  return <Table.Column {...rest}>{children}</Table.Column>
}

【讨论】:

  • ...rest 真的是三个点而不是两个点,还是根本不重要?您能否详细说明您的代码,我不确定什么是文字,什么是占位符。我猜,只有rest 是占位符,对吧。
  • 这是一种对象解构语法,我们称之为扩展运算符。您可以在此处阅读更多相关信息:javascript.info/destructuring-assignment。是的,这只是一个示例代码,您可以解构所有属性并将它们传递给 ant-design 组件
  • 出于某种原因,我认为JS spread operator 只是两个点,就像bash range operator。我一直在混淆语言..
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 2013-04-11
相关资源
最近更新 更多