当前位置:首页 > React

react如何扩展组件功能

2026-03-11 08:16:43React

使用高阶组件(HOC)

高阶组件是一种函数,接收一个组件并返回一个新组件。通过HOC可以复用逻辑,例如添加props、处理生命周期或注入状态。

function withLogger(WrappedComponent) {
  return function(props) {
    console.log('Rendered:', WrappedComponent.name);
    return <WrappedComponent {...props} />;
  };
}
const EnhancedComponent = withLogger(MyComponent);

使用自定义Hook

React Hook允许在不修改组件结构的情况下复用状态逻辑。自定义Hook可以提取通用逻辑,供多个组件调用。

react如何扩展组件功能

function useToggle(initialValue = false) {
  const [value, setValue] = useState(initialValue);
  const toggle = () => setValue(!value);
  return [value, toggle];
}
function MyComponent() {
  const [isOn, toggleIsOn] = useToggle();
  return <button onClick={toggleIsOn}>{isOn ? 'ON' : 'OFF'}</button>;
}

组合组件模式

通过childrenprops传递组件,实现功能组合。适用于UI和逻辑分离的场景。

function Card({ header, children }) {
  return (
    <div className="card">
      {header && <div className="card-header">{header}</div>}
      <div className="card-body">{children}</div>
    </div>
  );
}
function App() {
  return <Card header="Title">Content</Card>;
}

使用Render Props

通过props传递渲染函数,动态决定组件内容。适用于逻辑高度可定制的场景。

react如何扩展组件功能

class MouseTracker extends React.Component {
  state = { x: 0, y: 0 };
  handleMouseMove = (e) => this.setState({ x: e.clientX, y: e.clientY });
  render() {
    return (
      <div onMouseMove={this.handleMouseMove}>
        {this.props.render(this.state)}
      </div>
    );
  }
}
function App() {
  return <MouseTracker render={({ x, y }) => <div>Mouse at {x}, {y}</div>} />;
}

使用Context API

通过Context跨层级传递数据,避免props逐层传递。适用于全局状态或主题配置。

const ThemeContext = React.createContext('light');
function ThemedButton() {
  return (
    <ThemeContext.Consumer>
      {theme => <button className={theme}>Click</button>}
    </ThemeContext.Consumer>
  );
}
function App() {
  return (
    <ThemeContext.Provider value="dark">
      <ThemedButton />
    </ThemeContext.Provider>
  );
}

使用复合组件

通过多个子组件协同工作,共享隐式状态。例如<Select><Option>的组合。

const Select = ({ children }) => {
  const [value, setValue] = useState(null);
  return React.Children.map(children, child =>
    React.cloneElement(child, { value, setValue })
  );
};
const Option = ({ value, setValue, children }) => (
  <div onClick={() => setValue(value)}>{children}</div>
);
function App() {
  return (
    <Select>
      <Option value="1">Option 1</Option>
      <Option value="2">Option 2</Option>
    </Select>
  );
}

标签: 组件功能
分享给朋友:

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

vue 实现组件刷新

vue 实现组件刷新

组件局部刷新 在Vue中实现组件刷新可以通过强制重新渲染组件来实现。常用的方法有以下几种: 使用v-if指令 通过切换v-if条件触发组件的销毁和重建 <template> <…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一个…

vue实现换页功能

vue实现换页功能

Vue 实现分页功能 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 在 main.js 中引入: import Vue fr…

php购物车功能的实现

php购物车功能的实现

实现购物车功能的基本方法 使用PHP实现购物车功能可以通过会话(Session)或数据库存储购物车数据。以下是两种常见方法的详细说明。 使用Session存储购物车数据 PHP的$_SESSION可…