react 使用ts

函数组件

必须为props定义 类型

export const Header = (props: { text: string }) => <h2>{props.text}</h2>;
<Header text="hello" />

FC 类型包含children属性

export const Header: React.FC<{}> = (props) => <p>{props.children}</p>;
<Header>
  <h2>hello world</h2>
</Header>

VFC 类型不包含children属性

export const Header: React.VFC<{ builder: React.ReactNode }> = (props) => (
  <p>{props.builder}</p>
);
<Header builder={<h2>hello world</h2>} />;

class 组件

需要为props和state定义类型

export interface IProps {
  name: string;
}
export interface IState {}
export class Hello extends Component<IProps, IState> {
  render() {
    return (
      <>
        <p>hello {this.props.name}</p>
      </>
    );
  }
}

<Hello name="Ajanuw"/>

装饰器

@withHeader({})
class App extends Component {
  render() {
    return (
      <div className="App">
        <Header text="hello" />
        <Footer text="over" />
      </div>
    );
  }
}


function withHeader(opt: any) {
  return function(Target: any) {
    return class WithHeader extends Component {
      render() {
        console.log(opt);
        return (
          <div>
            123
            <Target />
          </div>
        );
      }
    };
  };
}
posted @ 2018-12-24 23:50  Ajanuw  阅读(236)  评论(0)    收藏  举报