react 组件逻辑复用

组件逻辑复用

React为什么设计成组件化的形式?其实最大的原因就是为了方便复用。
然而组件的复用虽然方便,逻辑的复用却很麻烦,因为state的存在,逻辑被锁死在组件内部,很难分离出去。

下面以一个可以改变背景色的步进器为例,展示react中常见的三种逻辑复用模式

高阶组件(HOC)实现逻辑复用

import React from "react";

const Count = ({ count, add, minus, theme, changeTheme }) => {
  return (
    <div
      style={
  {
        backgroundColor: theme,
        flex: 1,
        alignItems: "center",
        justifyContent: "center",
      }}
    >
      <h1>You clicked *{count}* times</h1>
      <h1 onClick={add}>add 1</h1>
      <h1 onClick={minus}>minus 1</h1>
      <h1 onClick={changeTheme}>change background</h1>
    </div>
  );
};

export default Count;

------------------------------------------------------

import React from "react";
import getRandomColor from "../utils/ColorHelper";

const changeTheme = (initColor) => (WrappedComponent) =>
  class ChangeTheme extends React.Component {
    state = {
      theme: initColor,
    };
    changeTheme = () => this.setState({ theme: getRandomColor() });
    render() {
      return (
        <WrappedComponent
          {...this.props}
          theme={this.state.theme}
          changeTheme={this.changeTheme.bind(this)}
        />
      );
    }
  };

export default changeTheme;

------------------------------------------------------

import React from "react";

const countNumber = (initNumber) => (WrappedComponent) =>
  class CountNumber exten
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值