当前位置:首页 > 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可以提取通用逻辑,供多个组件调用。

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传递渲染函数,动态决定组件内容。适用于逻辑高度可定制的场景。

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>的组合。

react如何扩展组件功能

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 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。 全局注册组件 全局注册的组件可以在任何 Vue 实例或组件中使用。…

vue轮播组件实现

vue轮播组件实现

vue轮播组件实现方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入: <template> <div cl…

php购物车功能实现

php购物车功能实现

数据库设计 购物车功能通常需要设计数据库表来存储商品和用户信息。常见的表包括: products 表:存储商品信息,如商品ID、名称、价格、库存等。 users 表:存储用户信息,如用户ID、用户名…

vue拨号功能实现

vue拨号功能实现

Vue 拨号功能实现 基本思路 拨号功能通常包括数字键盘、号码显示区、拨号按钮等组件。通过Vue的数据绑定和事件处理机制,可以轻松实现交互逻辑。 实现步骤 1. 创建数字键盘组件 使用Vue的v-f…

vue实现盖章组件

vue实现盖章组件

实现Vue盖章组件的步骤 组件结构设计 创建一个Vue组件,包含画布元素和必要的控制按钮。画布用于显示盖章效果,按钮用于触发盖章操作。组件需要接收图片和盖章位置等参数。 <template&g…

php实现登录功能

php实现登录功能

创建登录表单 在HTML中创建一个表单,包含用户名和密码输入框。表单的action属性指向处理登录的PHP文件,method设置为POST。 <form action="login.php"…