zoukankan      html  css  js  c++  java
  • 浅谈 TypeScript 无状态函数组件

    浅谈 TypeScript - 无状态函数组件

    浅谈 TypeScript - 无状态函数组件

     
     

    多数情况下,无状态的函数组件会用于一些纯粹的视觉展示,它可能是无操作的列表,甚至是一个无操作的按钮。根据以往的理解,在 TypeScript 的世界中,无状态函数组件被设计为 React.SFC,它只能接收 props,当然你也可以不传递 props

    export const StaticButton: React.SFC = () => {
      return (
        <button>Static</button>
      );
    };
    export const Header: React.SFC<IHeaderProps> = (props: IHeaderProps) => {
      const { localImageSrc, onLineImageSrc } = props;
      return (
        <div className={styles["header-container"]}>
          <img src={localImageSrc} />
          <img src={onLineImageSrc} />
        </div>
      );
    };
    

    我们从范例中其实可以得到一个很明确的信息,无状态函数组件没有任何生命周期的方法,也不能使用 setState ,但是我们可以访问到 context ,通过 context 对象倒是可以处理一些比较棘手的场景。不过正常情况下,我们多数不会这样做,因为它真的特别麻烦。

    // 父组件
    import * as React from "react";
    import PropTypes from "prop-types";
    import Header from "./components/Header";
    
    class ReactPage extends React.Component {
      public static childContextTypes = {
        localImageSrc: PropTypes.string,
      };
    
      public getChildContext() {
        return {
          localImageSrc: "http://images.w3crange.com/welearnmore.png",
        };
      }
    
      public render() {
        return (
          <div>
            React Page
            <Header
              onLineImageSrc="http://images.w3crange.com/welearnmore.png"
            />
          </div>
        );
      }
    }
    
    export default ReactPage;
    

    在父组件中要使用 getChildContext 必须定义 static childContextTypes,并且在子组件中定义同样的 contextTypes:

    import * as React from "react";
    import PropTypes from "prop-types";
    import { IHeaderProps } from "./types";
    import styles from "./style.css";
    
    const Header: React.SFC<IHeaderProps> = (props: IHeaderProps, context: any) => {
      const { onLineImageSrc } = props;
      return (
        <div className={styles["header-container"]}>
          <img src={context.localImageSrc} />
          <img src={onLineImageSrc} />
        </div>
      );
    };
    
    Header.contextTypes = {
      localImageSrc: PropTypes.string,
    };
    
    export default Header;
    

    一一对应,缺一不可,可查看完整范例

    无状态函数组件比较正确的做法是在很复杂的组件设计中,去分割一些更细小的组件,这样会有助于你组件的代码设计。

    编辑于 2018-09-19 17:14
  • 相关阅读:
    getField();在TP5里成什么了?
    .NET微信公众号开发-1.0初始微信公众号
    【原创】基于Bootstrap的Modal二次封装
    [原创]EF架构随心所欲打造属于你自己的DbModel
    [原创]Entity Framework查询原理
    [原创]扩展方法基本用法
    【原创】贡献一个项目中用到的js身份证验证-超级准!!!
    【原创】用JQury来制作星星打分特效功能
    【原创】Jquery初体验二
    Jquery初体验一
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/15663220.html
Copyright © 2011-2022 走看看