react中 ts注入器的使用

你羡慕的生活背后都是你熬不起的苦

  1. class中函数注入
    好比 原来的点击事件是每次只增加一个数 但是加上函数注入 每次就增加三个数
function addTwo() {
  return function (target: any, methodName: string, descriptor: PropertyDescriptor) {
    const fun = descriptor.value;
    descriptor.value = async function () {
      const self: any = this;
      try {
        const data = await fun.bind(self)();
      } catch (error) {
        // error
      }
      const num = self.state.num + 2;
      self.setState({
        num
      });
    };
  };
}


export default class In extends Component<any, any> {
  constructor(props: any) {
    super(props);
    this.state = {
      num: 0,
    };
    this.add = this.add.bind(this);
  }
  @addTwo() // 这里是函数注入 
  add() {
    const num = this.state.num + 1;
    this.setState({
      num
    });
  }
  render() {
    return (
      <div>
        <Button onClick={this.add}>加一</Button>
        <br/>
        {this.state.num}
      </div>
    );
  }
}
  1. class注入
    原来的类中只有增加方法 但是没有减少 使用类注入就可以增加一个减一的方法
function Class() {
  return function (target: any): any {
    return class extends target {
      constructor(...args: any[]) {
        super(...args);
        if (!this.state) {
          this.state = {};
        }
        this.del = this.del.bind(this);
      }
      del() {
        const num = this.state.num - 1;
        this.setState({
          num
        });
      }
      render() {
        return (
          <div>
            <Button className="mr10" onClick={this.add}>加一</Button>
            {this.state.num}
            <Button className="ml10" onClick={this.del}>减一</Button>
          </div>
        );
      }
    };
  };
}

@Class()
export default class In extends Component<any, any> {
  
  constructor(props: any) {
    super(props);
    this.state = {
      num: 0,
    };
    this.add = this.add.bind(this);
  }

  add() {
    const num = this.state.num + 1;
    this.setState({
      num
    });
  }
  render() {
    return (
      <div>
        <Button onClick={this.add}>加一</Button>
        <br/>
        {this.state.num}
      </div>
    );
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 结合 TypeScript 使用 Refs 可以通过 `React.RefObject` 接口来定义 Ref 类型,具体步骤如下: 1. 首先,在组件定义一个 Ref 对象: ```typescript import React, { useRef } from 'react'; interface MyComponentProps { // props } const MyComponent: React.FC<MyComponentProps> = (props) => { const inputRef = useRef<HTMLInputElement>(null); // ... }; ``` 这里我们定义了一个名为 `inputRef` 的 Ref 对象,它的类型是 `React.RefObject<HTMLInputElement>`,指向一个 input 元素。 2. 将 Ref 对象传递给组件的元素或组件: ```typescript return ( <div> <input type="text" ref={inputRef} /> </div> ); ``` 这里我们将 `inputRef` 传递给了 input 元素的 `ref` 属性,这样在组件渲染完毕后,我们就可以通过 `inputRef.current` 来访问这个 input 元素了。 3. 在组件使用 Ref 对象: ```typescript const handleClick = () => { if (inputRef.current) { inputRef.current.focus(); } } return ( <div> <input type="text" ref={inputRef} /> <button onClick={handleClick}>Focus</button> </div> ); ``` 这里我们定义了一个 `handleClick` 方法,当用户点击按钮时,调用这个方法,它会将焦点聚焦到 input 元素上。通过 `inputRef.current` 可以获取当前 input 元素的引用,然后调用 `focus()` 方法即可聚焦。 以上就是在 React 结合 TypeScript 使用 Refs 的基本步骤。需要注意的是,当使用 Refs 时,要确保对 Ref 对象的访问是安全的,即先检查 `ref.current` 是否为 null,然后再进行操作,以避免出现运行时错误。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值