📜  如何在样式化的组件中使用另一个元素的相同设置 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:52:56.840000             🧑  作者: Mango

如何在样式化的组件中使用另一个元素的相同设置 - TypeScript

在开发React应用时,样式化的组件是非常常见的。有时候,我们会需要多个组件共享相同的样式设置,而不是复制粘贴每个组件的设置。在这种情况下,我们可以使用React中的高阶组件和TypeScript的泛型来实现这个目的。

步骤
  1. 首先,在一个单独的文件中创建一个高阶组件,用于将相同的样式设置应用到所包装的子组件上。我们可以使用TypeScript的泛型来通用化这个高阶组件,以便它适用于任何需要应用这些设置的组件。以下是这个高阶组件的示例代码:
import React, { ComponentType } from 'react';
import './shared-styles.css';

interface SharedStylesProps {
  className?: string;
}

function withSharedStyles<T extends SharedStylesProps>(WrappedComponent: ComponentType<T>) {
  return (props: T) => (
    <WrappedComponent {...props} className={`shared-styles ${props.className || ''}`} />
  );
}

export default withSharedStyles;

这个高阶组件接受一个泛型参数T,该参数限制了包装组件的props,使其必须包含一个可选的className属性。该高阶组件返回一个新的组件,该组件包装了传入的子组件,并将共享的样式设置应用到它们上。

  1. shared-styles.css文件中定义我们想要共享的样式规则。以下是一个示例样式集合:
.shared-styles {
  font-size: 1rem;
  font-family: Arial, sans-serif;
  color: #333333;
  border: 1px solid #cccccc;
  padding: 5px;
}
  1. 现在我们可以在任何需要共享这些样式的组件中使用我们的高阶组件。以下是一个示例组件代码:
import React, { FC } from 'react';
import withSharedStyles, { SharedStylesProps } from './with-shared-styles';

interface MyComponentProps extends SharedStylesProps {
  text: string;
}

const MyComponent: FC<MyComponentProps> = ({ text, className }) => (
  <div className={className}>
    <p>{text}</p>
  </div>
);

export default withSharedStyles(MyComponent);

这个组件包含withSharedStyles作为它的高阶组件,并将它的props传递给被包装的组件。因为withSharedStyles高阶组件的泛型参数T必须包含一个可选的className属性,所以我们可以安全地将这个属性添加到子组件的props类型定义中。

现在,我们的MyComponent组件将会具有.shared-styles类名称,这个类名称是从我们的withSharedStyles高阶组件中应用的共享样式规则得到的。

结论

使用TypeScript的泛型和React的高阶组件,我们可以轻松地创建可重复使用的设置共享组件,并将这些组件应用于多个React组件中。这使得我们的代码更简洁易读,并帮助避免重复代码和样式的设计错误。