当前位置:首页 > React

react如何封装new 组件

2026-01-24 22:14:38React

封装 React 组件的基本方法

React 组件封装的核心思想是通过组合抽象实现复用性。以下是封装组件的关键步骤:

定义组件接口 使用 props 明确组件接收的参数和类型,推荐结合 TypeScript 或 PropTypes:

interface ButtonProps {
  children: React.ReactNode;
  variant?: 'primary' | 'secondary';
  onClick?: () => void;
}

实现基础结构 创建函数组件并处理基础逻辑:

const Button = ({ children, variant = 'primary', onClick }: ButtonProps) => {
  return (
    <button 
      className={`button-${variant}`}
      onClick={onClick}
    >
      {children}
    </button>
  );
};

进阶封装技巧

复合组件模式 通过 children 或具名插槽实现灵活组合:

const Card = ({ header, content, footer }) => (
  <div className="card">
    {header && <div className="header">{header}</div>}
    <div className="content">{content}</div>
    {footer && <div className="footer">{footer}</div>}
  </div>
);

// 使用示例
<Card 
  header={<h3>标题</h3>}
  content={<p>正文内容</p>}
/>

HOC 高阶组件 扩展组件功能而不修改原组件:

const withLogger = (WrappedComponent) => {
  return (props) => {
    useEffect(() => {
      console.log('组件已挂载');
    }, []);
    return <WrappedComponent {...props} />;
  };
};

最佳实践建议

状态管理分离 将业务逻辑与 UI 解耦,使用自定义 Hook:

const useCounter = (initialValue = 0) => {
  const [count, setCount] = useState(initialValue);
  const increment = () => setCount(v => v + 1);
  return { count, increment };
};

// 组件内调用
const Counter = () => {
  const { count, increment } = useCounter();
  return <button onClick={increment}>{count}</button>;
};

上下文封装 对复杂层级使用 Context API:

const ThemeContext = createContext('light');

const ThemeProvider = ({ children }) => {
  const [theme, setTheme] = useState('light');
  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

性能优化方案

Memoization 技术 避免不必要的重新渲染:

const MemoizedComponent = React.memo(({ data }) => {
  return <div>{data}</div>;
}, (prevProps, nextProps) => {
  return prevProps.data === nextProps.data;
});

懒加载实现 配合 Suspense 实现代码分割:

const LazyComponent = React.lazy(() => import('./HeavyComponent'));

const App = () => (
  <Suspense fallback={<Loader />}>
    <LazyComponent />
  </Suspense>
);

测试策略

单元测试配置 使用 Jest + Testing Library 编写测试用例:

test('Button renders correctly', () => {
  render(<Button>Click</Button>);
  expect(screen.getByText('Click')).toBeInTheDocument();
});

Storybook 集成 可视化开发组件库:

// Button.stories.js
export default {
  title: 'Components/Button',
  component: Button,
};

export const Primary = () => <Button variant="primary">Submit</Button>;

react如何封装new 组件

标签: 组件react
分享给朋友:

相关文章

vue 组件实现

vue 组件实现

Vue 组件实现方法 单文件组件 (SFC) 使用 .vue 文件格式,包含模板、脚本和样式三部分: <template> <div class="example">{{…

vue实现组件跟随

vue实现组件跟随

实现组件跟随的常见方法 使用CSS定位 通过CSS的position: fixed或position: absolute属性实现组件跟随。需要结合JavaScript计算目标元素的位置。 <…

vue动态组件实现

vue动态组件实现

Vue 动态组件实现方法 使用 component 标签与 is 属性 通过 Vue 内置的 <component> 标签和 is 属性实现动态组件切换。is 的值可以是已注册的组件名或导…

vue实现组件循环

vue实现组件循环

Vue 实现组件循环的方法 在 Vue 中,可以通过 v-for 指令实现组件的循环渲染。以下是几种常见的实现方式: 使用 v-for 渲染数组 通过 v-for 遍历数组数据,动态生成组件列表:…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

vue穿梭框组件实现

vue穿梭框组件实现

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