当前位置:首页 > React

react如何写一个纯ui组件

2026-01-26 09:41:25React

编写纯UI组件的核心原则

纯UI组件(又称"无状态组件"或"展示组件")应只关注界面渲染,不包含业务逻辑或状态管理。这类组件通过props接收数据,通过回调函数与父组件通信。

函数组件实现方式

使用函数组件是最简洁的写法,适合简单的UI展示:

const Button = ({ text, onClick, disabled = false }) => (
  <button 
    onClick={onClick}
    disabled={disabled}
    className="primary-btn"
  >
    {text}
  </button>
);

类组件实现方式

当需要生命周期方法时可以使用类组件:

class Modal extends React.Component {
  render() {
    const { title, content, onClose } = this.props;
    return (
      <div className="modal-overlay">
        <div className="modal-content">
          <h3>{title}</h3>
          <p>{content}</p>
          <button onClick={onClose}>Close</button>
        </div>
      </div>
    );
  }
}

类型检查(PropTypes)

为组件添加prop类型检查能提高可维护性:

react如何写一个纯ui组件

import PropTypes from 'prop-types';

const Avatar = ({ src, size, alt }) => (
  <img 
    src={src} 
    width={size} 
    height={size} 
    alt={alt} 
  />
);

Avatar.propTypes = {
  src: PropTypes.string.isRequired,
  size: PropTypes.number,
  alt: PropTypes.string
};

Avatar.defaultProps = {
  size: 40,
  alt: 'User avatar'
};

样式处理方案

常见的样式处理方式有三种:

CSS Modules

import styles from './Card.module.css';

const Card = ({ children }) => (
  <div className={styles.card}>
    {children}
  </div>
);

Styled-components

react如何写一个纯ui组件

import styled from 'styled-components';

const StyledInput = styled.input`
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
`;

const TextInput = ({ value, onChange }) => (
  <StyledInput 
    type="text" 
    value={value} 
    onChange={onChange} 
  />
);

内联样式

const Badge = ({ color, text }) => {
  const style = {
    backgroundColor: color,
    padding: '2px 6px',
    borderRadius: '10px'
  };

  return <span style={style}>{text}</span>;
};

最佳实践建议

  • 保持组件单一职责原则,每个组件只做一件事
  • 为可重用组件编写清晰的propTypes
  • 避免在展示组件中使用状态(useState/this.state)
  • 将事件处理通过props传递给父组件
  • 使用默认参数处理可选props
  • 为组件添加displayName便于调试

性能优化技巧

使用React.memo避免不必要的重渲染:

const MemoizedList = React.memo(({ items }) => (
  <ul>
    {items.map(item => (
      <li key={item.id}>{item.text}</li>
    ))}
  </ul>
));

对于类组件可以使用PureComponent:

class PureButton extends React.PureComponent {
  render() {
    return <button>{this.props.text}</button>;
  }
}

标签: 组件如何写
分享给朋友:

相关文章

vue实现水印组件

vue实现水印组件

Vue 水印组件实现 基础水印组件实现 创建一个基础水印组件,通过 props 接收文本、颜色、大小等参数: <template> <div class="watermark-…

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过d…

vue穿梭框组件实现

vue穿梭框组件实现

实现 Vue 穿梭框组件的基本思路 穿梭框(Transfer)组件通常用于在两个列表之间移动数据项。核心功能包括左侧列表、右侧列表、移动按钮(左移、右移、全选等)以及数据项的渲染与交互。 基础结构设…

实现vue组件

实现vue组件

创建 Vue 组件 Vue 组件可以通过单文件组件(.vue 文件)或直接在 JavaScript 中定义。以下是两种常见实现方式。 单文件组件方式 单文件组件包含模板、脚本和样式三部分,适合复杂…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

uniapp倒计时组件

uniapp倒计时组件

uniapp倒计时组件实现方法 使用内置组件实现 uniapp提供了<countdown>组件用于倒计时功能,支持自定义格式和样式。示例代码如下: <countdown :…