当前位置:首页 > 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 中实现名字查找功能,可以通过以下方法完成。这里假设有一个名字列表,需要根据用户输入的关键词进行筛选。 数据准备 在 Vue 的 data 中定义名字列表和搜索关…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

vue实现答题功能

vue实现答题功能

Vue实现答题功能 数据准备 创建一个包含题目、选项和正确答案的数据结构,通常是一个数组对象。每个题目对象包含问题文本、选项数组和正确答案索引。 const questions = [ {…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

php分页功能的实现

php分页功能的实现

分页功能的基本原理 分页功能的核心是通过SQL的LIMIT子句实现数据分段查询。LIMIT接受两个参数:起始位置偏移量和每页记录数。例如查询第2页(每页10条)的SQL语句为: SELECT * F…