1.0.1 • Published 5 years ago

rax-types v1.0.1

Weekly downloads
28
License
-
Repository
github
Last release
5 years ago

rax-types npm

Installation

npm install --save rax-types

Config

Add node_modules/rax-types to your tsconifg.json file, like so:

{
  "compilerOptions": {
    "typeRoots": [
      "node_modules/rax-types", 
      "node_modules/@types"
    ],
    "paths": {
      "rax": ["node_modules/rax-types"]
    }
  }
}

Usage

Hooks

import * as Rax from 'rax';

const createElement = Rax.createElement;

// FunctionComponent
interface PersonProps {
  name: string;
  age: number;
}
const Person: Rax.FunctionComponent<PersonProps> = (props) => {
  return (
    <text>
      hello! I'm {props.name} and I'm {props.age} years old!
    </text>
  );
};

// FunctionComponent With Ref
export interface FancyButtonProps {
  onClick: () => void;
  children?: Rax.RaxNode;
}
export interface FancyButton {
  getClickCount(): number;
}
export const FancyButton = Rax.forwardRef((props: FancyButtonProps, ref: Rax.Ref<FancyButton>) => {
  const [count, setCount] = Rax.useState(0);

  Rax.useImperativeHandle(ref, () => ({
    getClickCount() {
      return count;
    }
  }));

  return (
    <div
      onClick={() => {
        setCount(count + 1);
        props.onClick();
      }}
    >
      {props.children}
    </div>
  );
});

interface AppState {
  name: string;
  age: number;
}

type AppActions = { type: 'getOlder' } | { type: 'resetAge' };

function reducer(s: AppState, action: AppActions): AppState {
  switch (action.type) {
    case 'getOlder':
      return { ...s, age: s.age + 1 };
    case 'resetAge':
      return { ...s, age: 0 };
  }
}

const initialState = {
  name: 'Rax',
  age: 18
};

export function App() {
  const [state, dispatch] = Rax.useReducer(reducer, initialState);
  const birthdayRef = Rax.useRef<FancyButton>(null);

  Rax.useLayoutEffect(() => {
    if (birthdayRef.current !== null) {
      birthdayRef.current.getClickCount();
    } else {
      // this looks redundant but it ensures the type actually has "null" in it instead of "never"
      // $ExpectType null
      console.log(birthdayRef.current);
    }
  });

  return (
    <Rax.Fragment>
      <Person {...state} />
      <FancyButton
        onClick={() => {
          if (birthdayRef.current !== null) {
            console.log(birthdayRef.current.getClickCount());
          }
          dispatch({ type: 'getOlder' });
        }}
        ref={birthdayRef}
      >
        Birthday time!
      </FancyButton>
      <FancyButton onClick={() => dispatch({ type: 'resetAge' })}>Let's start over.</FancyButton>
    </Rax.Fragment>
  );
}

export default App;
@everything-registry/sub-chunk-2533@aliretail/10008224358-abc_456789123456-modules-fe-miniapp-rax-f_app_wire_pc@aliretail/10008224358-abc_456789123456-modules-fe-miniapp-rax-f_applet_rax@aliretail/10008224358-abc_456789123456-modules-fe-wireless-rax-f_app_wire_pc@aliretail/10008224358-appcdxizhi-official-mod-wireless-rax-appxzmk1019@aliretail/10008224358-appcdxizhi-official-mod-wireless-rax-xizhi01mc@aliretail/10008224358-code1-modules-fe-miniapp-rax-mokuai2@aliretail/10008224358-code1-modules-fe-miniapp-rax-mokuai5@aliretail/10008224358-code1-modules-fe-wireless-rax-mokuai1@aliretail/10008224358-code1-modules-fe-wireless-rax-mokuai19@aliretail/10008224358-code1-modules-fe-wireless-rax-mokuai5@aliretail/10008224358-code25-modules-fe-miniapp-rax-mokuai111@aliretail/10008224358-code25-modules-fe-wireless-rax-mokuai222@aliretail/10008224358-dcz_app_2-dc_code_1-mod-wireless-rax-new_self@aliretail/10008224358-dcz_app_2-official-mod-miniapp-rax-samllpro_up@aliretail/10008224358-dcz_app_2-official-mod-miniapp-rax-small_pro_rax_20210524@aliretail/10008224358-dcz_app_2-official-mod-wireless-rax-mokuai_1@aliretail/10008224358-xzwljiaohu1020-modules-fe-wireless-rax-xzmkjiaohu1020@aliretail/1622014846499mod-wireless-rax-new_mokuai_1@aliretail/1622550117773mod-wireless-rax-rax_1_20210608@aliretail/1625467762213mod-miniapp-rax-business_apple_rax_20210813@aliretail/1625467762213mod-wireless-rax-form_012@aliretail/base-member-sdk@aliretail/basemember@aliretail/biz_ha-shop-deploy-pocmod-miniapp-rax-business_apple_rax_20210610@aliretail/biz_ha-shop-deploy-pocmod-miniapp-rax-self_rax_small_1@aliretail/biz_ha-shop-deploy-pocmod-wireless-rax-business_wireless_rax_20210610@aliretail/biz_ha-shop-deploy-pocmod-wireless-rax-self_template_1@aliretail/10008224358-scf_02-modules-fe-wireless-rax-t_wireless_rax4@aliretail/10008224358-scf_02-modules-fe-wireless-rax-wire_app_rax1_pc@aliretail/10008224358-scf_07-modules-fe-wireless-rax-w7_wireless_rax@aliretail/10008224358-scf_08-modules-fe-miniapp-rax-w8_wireless_rax1@aliretail/10008224358-scf_15-official-mod-miniapp-rax-p_applet917@aliretail/10008224358-scf_15-official-mod-wireless-rax-p_wirelessrax917@aliretail/10008224358-scf_9152050-modules-fe-miniapp-rax-p_applet_a@aliretail/10008224358-scf_9152050-modules-fe-wireless-rax-wireless_rax_a@aliretail/10008224358-scf_981137-modules-fe-miniapp-rax-t_applet_1@aliretail/10008224358-scf_981137-modules-fe-wireless-rax-t_wireless_1@aliretail/10008224358-scf_981206-modules-fe-miniapp-rax-y_app_wire3@aliretail/10008224358-scf_981206-modules-fe-miniapp-rax-y_applet_1@aliretail/10008224358-scf_981206-modules-fe-miniapp-rax-y_wire_app_1@aliretail/10008224358-scf_981206-modules-fe-wireless-rax-y_app_wire3@aliretail/10008224358-scf_981206-modules-fe-wireless-rax-y_app_wire_2@aliretail/10008224358-scf_981206-modules-fe-wireless-rax-y_wireless_rax1@aliretail/10008224358-scf_981206-modules-fe-wireless-rax-y_wireless_rax2@aliretail/10008224358-scf_apply-dc_code_1-mod-miniapp-rax-b_applet_01@aliretail/10008224358-scf_apply-dc_code_1-mod-wireless-rax-b_wireless_01@aliretail/10008224358-scf_apply-official-mod-miniapp-rax-p_applet_01@aliretail/10008224358-futu_app02-official-mod-wireless-rax-futu_test_002@aliretail/10008224358-futu_app02-official-mod-wireless-rax-test11@aliretail/10008224358-futu_app02-ttest-mod-wireless-rax-futu_test_mod_biz01@aliretail/10008224358-futu_app1-official-mod-wireless-rax-futu_module_1@aliretail/10008224358-futu_app1-official-mod-wireless-rax-futu_offcial_001@aliretail/10008224358-futu_app1-official-mod-wireless-rax-futu_test_m_003@aliretail/10008224358-futu_app1-official-mod-wireless-rax-test@aliretail/10008224358-futu_app1-test-mod-wireless-rax-m_header_1@aliretail/10008224358-futu_miniapp_pkg-modules-fe-miniapp-rax-futu_shop_test02@aliretail/10008224358-futu_normal_pkg3-modules-fe-wireless-rax-futu_test_m_306@aliretail/10008224358-futu_test_pkg001-modules-fe-wireless-rax-futu_test_mod001@aliretail/10008224358-m11-modules-fe-wireless-rax-m11@aliretail/10008224358-m_pkg_2021.07_v1-modules-fe-wireless-rax-m20210707v4@aliretail/10008224358-online_pkg_test-modules-fe-wireless-rax-online_m01@aliretail/10008224358-scf_01-modules-fe-wireless-rax-wire_app_form@aliretail/10008224358-scf_01-modules-fe-wireless-rax-wireless_03@aliretail/10008224358-scf_02-modules-fe-miniapp-rax-t_applet_rax1@aliretail/10008224358-scf_apply-official-mod-wireless-rax-p_wireless_01@aliretail/10008224358-scf_test1-modules-fe-miniapp-rax-applet_rax1@aliretail/10008224358-scf_test1-modules-fe-wireless-rax-wireless_rax1@aliretail/10008224358-scf_test15-modules-fe-miniapp-rax-applet_917@aliretail/10008224358-scf_test15-modules-fe-wireless-rax-wireless_rax917@aliretail/10008224358-shop-official-mod-miniapp-rax-s_app_wireless@aliretail/10008224358-shop-official-mod-miniapp-rax-s_applet_rax@aliretail/10008224358-shop-official-mod-wireless-rax-s_wireless_rax@aliretail/10008224358-shop-official-mod-wireless-rax-shop_module_test@aliretail/10008224358-test_0628-dc_code_1-mod-miniapp-rax-b_applet@aliretail/10008224358-test_0628-dc_code_1-mod-wireless-rax-b_wireless@aliretail/10008224358-test_0628-dcz_code_1-mod-wireless-rax-wu_rax@aliretail/10008224358-vessxizhi001-modules-fe-wireless-rax-futu_test_mod001@aliretail/10008224358-xizhivescode2-modules-fe-wireless-rax-ximc_md_01@aliretail/10008224358-xizhivesee00-modules-fe-wireless-rax-xizhimc000@aliretail/10008224358-xizhivess_10-modules-fe-wireless-rax-xizhi_01@aliretail/10008224358-xizhivessel2-modules-fe-wireless-rax-xizhi_mc_01@aliretail/10008224358-xzwljiaofu031020-modules-fe-wireless-rax-xcmkmu031020@aliretail/10008224358-xzwljiaofu031020-modules-fe-wireless-rax-xzmk0031020@aliretail/10008224358-xzwljiaofu031020-modules-fe-wireless-rax-xzmktest031020@aliretail/10008224358-xzwljiaofu041020-modules-fe-wireless-rax-ximk0041020@aliretail/10008224358-scf_02-modules-fe-wireless-rax-t_wireless_rax1@aliretail/10008224358-dcz_app_2-official-mod-wireless-rax-wireless_up@aliretail/test-npm-demo-dubu@aliretail/test-npm-demo-xxx@aliretail/xizhisite1-frontend-mod-wireless-rax-xizhimc@aliretail/xzse110409-frontend-mod-wireless-rax-xizhi_mc_01@aliretail/officialmod-wireless-rax-platfrom_wireless_rax_20210610@aliretail/officialmod-wireless-rax-shop_wireless_20210525@aliretail/officialmod-wireless-rax-symmxc01@aliretail/point-member-sdk@aliretail/point-member-sdk-dev@aliretail/officialmod-miniapp-rax-mall_group_old@aliretail/officialmod-miniapp-rax-mall_order_bar@aliretail/officialmod-miniapp-rax-mall_period_shopbag
1.0.1

5 years ago

1.0.0

5 years ago